c# - studio - web api json response default



как публиковать произвольный json-объект для webapi (3)

Вы можете использовать свой метод post, который принимает HttpRequestMessage, передавая логику привязки модели, и вы можете напрямую прочитать содержимое запроса:

    public HttpResponseMessage Post(HttpRequestMessage req)
    {
        var data = req.Content.ReadAsStringAsync().Result; // using .Result here for simplicity...
        ...

    }

Кстати, причина, по которой действие, выполняемое в JObject, не работает, связано с «ObjectId (« ... »)», которое используется как значение «_id» в ваших данных ...

Как мне / можно передать объект json в контроллер webapi (POST) и не иметь класс для его сопоставления, а скорее обрабатывать его как произвольный контент?

Поэтому, если я перейду от своего клиента так:

        createRecord: function (model, data, callback, callbackParams) {
        var request = jQuery.ajax({
            type: "POST", // default = GET,
            url: '/api/' + model + '/',
            data: data,
            contentType: 'application/json',
            success: function (msg) {
                $('#results').text(msg);
                if (callback) // only fire a callback if it has been specified
                    callback(msg, callbackParams);
            },
            error: function (jqXHR, textStatus) {
                alert('Request failed: ' + textStatus);
            }
        });
    }

и данные - это что-то вроде:

{ "_id" : ObjectId("5069f825cd4c1d590cddf206"), "firstName" : "John", "lastName" : "Smith", "city" : "Vancouver", "country" : "Canada" }

Мой контроллер сможет его разобрать? И в следующий раз данные могут не соответствовать этой сигнатуре (например:

{ "_id" : ObjectId("5069f825cd4c1d56677xz6"), "company" : "Acme" }

В моем контроллере я попытался:

public HttpResponseMessage Post([FromBody]JObject value)

а также:

public HttpResponseMessage Post([FromBody]string value)

и (потому что на самом деле это работает с mongo db):

public HttpResponseMessage Post([FromBody]BsonDocument value)

но похоже, что объект mapper хочет сопоставить что-то другое, кроме строки ...


Answer #1

Мы передали json-объект jquery и проанализировали его в динамическом объекте. он отлично работает. это пример кода:

ajaxPost:

...
Content-Type: application/json,
data: {
          "name": "Jack", 
          "age": "12"
      }
...

WebAPI:

[HttpPost]
public string DoJson2(dynamic data)
{
    string name = data.name;
    int age = data.age;

    return name;
}

аналогичный вопрос о : параметры WebAPI Multiple Put / Post


Answer #2

Это очень просто, вам просто нужно поставить Accept Header в «application / json».





asp.net-web-api