programing

임의의 json 개체를 webapi에 게시하는 방법

goodsources 2023. 6. 30. 22:18
반응형

임의의 json 개체를 webapi에 게시하는 방법

json 개체를 POST(webapi controller)에 전달하고 매핑할 클래스가 없는 대신 임의 콘텐츠로 처리하는 방법은 무엇입니까?

그래서 제가 제 고객으로부터 그렇게 지나가면,

        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)

그리고 (이것은 실제로 몽고드와 함께 작동하기 때문에):

public HttpResponseMessage Post([FromBody]BsonDocument value)

하지만 객체 매퍼가 문자열이 아닌 다른 것에 매핑하려고 하는 것 같습니다.

HttpRequestMessage를 사용하여 모델 바인딩 로직을 무시하고 요청 내용을 직접 읽을 수 있는 게시 방법을 사용할 수 있습니다.

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

    }

그런데 JObject를 가져오는 작업이 작동하지 않는 이유는 데이터에서 "_id"의 값으로 사용되는 'ObjectId("...")' 때문입니다.

우리는 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 매개 변수

당신의 의견은,"_id": ObjectId("5069f825cd4c1d590cddf206")서버에서 JSON의 구체화를 깨는 것입니다.제거 중ObjectId및 사용"_id" : "5069f825cd4c1d590cddf206"와 함께 작동합니다.JObject게다가Dictionary<string, object>

매우 쉬우므로 Accept Header를 "application/json"에 넣기만 하면 됩니다.

언급URL : https://stackoverflow.com/questions/13573384/how-to-post-arbitrary-json-object-to-webapi

반응형