ポストパラメータは常にnullです


197

WebAPIをRCにアップグレードしてから、私のWebAPIでPOSTを呼び出すときに、本当に奇妙な問題が発生しています。新しいプロジェクトで生成された基本的なバージョンに戻りました。そう:

public void Post(string value)
{
}

Fiddlerからの呼び出し:

Header:
User-Agent: Fiddler
Host: localhost:60725
Content-Type: application/json
Content-Length: 29

Body:
{
    "value": "test"
}

デバッグすると、文字列「値」が割り当てられません。常にNULLです。この問題を抱えている人はいますか?

(私は最初により複雑なタイプの問題を見ました)

この問題はASP.NET MVC 4に限定されているだけでなく、RCのインストール後の新しいASP.NET MVC 3プロジェクトでも同じ問題が発生します。


問題を追加するだけです-これはJSONに限定されるものではなく、XMLでも発生します。
ianrathbone

3
私はこれを2日間試していましたが、それについて見つけることができるすべての記事を読んだ後、それはWebRequestでJSON文字列を正しくフォーマットするのと同じくらい簡単であることがわかりました:データは二重引用符で開始および終了する必要があります。 jsonデータ全体で一重引用符を使用してください。
Gineer

回答:


101

パラメーターが1つしかないので、[FromBody]属性で装飾するか、メソッドを変更して、値がプロパティとしてDTOを受け入れるようにすることができます。これは、ここで提案したとおりです。MVC4RC WebApiパラメーターバインディング

更新:ASP.NETの公式サイトが本日更新され、優れた説明が提供されました。https//docs.microsoft.com/en-us/aspnet/web-api/overview/advanced/sending-html-form-data-part- 1

簡単に言えば、本文で単一の単純型を送信するときは、等号(=)を前に付けた値だけを送信します。例:body:

=test


9
[FromBody]を回したが変化はなかった
ianrathbone

11
単に値(すなわちないJSONオブジェクトとして)を渡し、それが動作するはずです、に従ってblogs.msdn.com/b/jmstall/archive/2012/04/16/...
ジム・ハート

8
=(JSONオブジェクトとしてではなく)コメントでジムのアドバイスに従って、それが機能するまで、前の追加は機能しませんでした。これが鍵です!私は本当にWebAPIがうるさいのが嫌いです。
gitsitgo 14

16
これは愚かで迷惑なため、問題の解決に役立つ回答に賛成票を投じるか反対票を投じるかわからない...なぜこの形式にする必要があるのでしょうか。(態度について申し訳ありません、これに時間を浪費しすぎて、それは意味がありません... :()。あなたは本当に人々がそれを受け入れることを期待するフォーマットのサポートを追加するべきです。
gdoronは2015

6
ありがとう!パラメータを1つだけ送信する場合は、パラメータ名を削除する必要があることを、いったいどのように知る必要がありますか?このアイデアを思いついたのはどの鳥の頭ですか?
Jenny O'Reilly

104

今日はこれについて頭を悩ませています。

私の解決策はをに変更する[FromBody]ことHttpRequestMessageです。本質的にHTTPスタックを上に移動します。

私の場合、base64で圧縮されたjsonで圧縮されたデータをネットワーク経由で送信しています。これはすべてAndroidアプリからのものです。

Webエンドポイントの元の署名は次のようになりました(を使用[FromBody])。

私の元のエンドポイント

この問題に対する私の修正HttpRequestMessageは、エンドポイントの署名にを使用するように戻すことでした。

ここに画像の説明を入力してください

その後、次のコード行を使用して投稿データにアクセスできます。

ここに画像の説明を入力してください

これは機能し、そのままの未加工の投稿データにアクセスできます。文字列の先頭に=記号を付けたり、コンテンツタイプを変更したりするフィドラーをいじる必要はありません。

余談ですが、私は最初に、コンテンツタイプを「コンテンツタイプ:application / x-www-form-urlencoded」に変更するという上記の答えの1つに従うことを試みました。生データの場合、+文字が削除されるため、これは悪いアドバイスです。

したがって、「MQ0AAB + LCAAAAAA」のように始まるbase64文字列は、「MQ0AAB LCAAAAAA」のようになります。あなたが望むものではありません。

を使用するもう1つの利点はHttpRequestMessage、エンドポイント内からすべてのhttpヘッダーにアクセスできることです。


6
優れた解決策...これを見つけるのに9時間かかり、[FromBody]文字列値を削除して問題を整理し、HttpRequestMessageで置き換えました
Kev

1
魅力的な作品!しかし、特定のオブジェクトの実際のパラメーター型を使用する方法はありませんか?たとえば、Web APIメソッドのタイプOrderのパラメーター?
Ron Nuni

7
余談ですがHttpRequestMessage request、メソッドシグネチャは既に必要なので、必要ありません。メソッド本体では、Requestオブジェクトからアクセスできます。例Request.Content.ReadAsStringAsync().Result;
Morvael

通常、この問題は、JSONオブジェクトが正しくないことが原因です。これは、コンストラクターに無効な型があり、JsonがそれをGuidのように文字列に変換する方法を知らないために、常に見つかります。したがって、設定を介してコンバータを追加するか、空のコンストラクタを追加すれば、このような古いコードに戻す必要はありません。
Nick Turner、

最も簡単な方法は、オブジェクトを文字列に切り替えてから変換してみると、JSONエラーが表示されます。ヘッダーも確認してください。
Nick Turner、

71

私はこれをFiddlerを使用して発生させました。問題は、私が指定していなかったことでしたContent-Type

のヘッダーをContent-TypePOSTリクエストに含めてみてください。

Content-Type: application/x-www-form-urlencoded

または、以下のコメントに従って、JSONヘッダーを含める必要がある場合があります

Content-Type: application/json

11
Content-Typeを設定する必要があることを除いて、私は同様の問題を抱えていました:application / json
dvallejo 2013年

2
投稿で指定されているように、私はすでにContent-Type:application / json
ianrathboneを

2
application / x-www-form-urlencodedは機能しませんでした。Content-Type:application / jsonは機能しました。
リャン2014

1
content-typeに関係なく、パラメーターが1つしかない場合は、リクエストの本文にパラメーター名を含めずに値のみを送信する必要があります。したがって、id = 13は機能しません。13だけを送信する必要があります。ジムの答えを見てください。
Jenny O'Reilly

私が使用していたcontentType: "application/x-www-form-urlencoded; charset=UTF-8"完全な例を参照、完全なCientおよびサーバ
RyBolt

57

私もこの問題に遭遇しました、そしてこれが私の問題を解決した方法です

webapiコード:

public void Post([FromBody] dynamic data)
{
    string value = data.value;
    /* do stuff */
}

クライアントコード:

$.post( "webapi/address", { value: "some value" } );

1
これは、クライアントがJSONを送信している場合に機能します。文字列などの単純な値を送信している場合some valuedataはnullです。
brianestey 2016年

簡単です。クライアントコードを変更してjsオブジェクトを送り返します。
ジョージ

JSONからデータを取得するための素晴らしい方法
Wouter Vanherck

jsonを送信する場合、var json = JsonConvert.SerializeObject(data);
dvallejo

41

私は使用Postmanしていて、同じ間違いをしていました。value文字列の代わりにjsonオブジェクトとして

{
    "value": "test"
}

明らかに、apiパラメータが文字列型である場合、上記のものは間違っています。

したがって、API本体で文字列を二重引用符で渡すだけです。

"test"

2
これは私の問題であり、おそらくこの質問に対する実際の解決策でした。JSONエンコードされた文字列には引用符があります
Kyle W

1
Postmanでもこの問題が発生しました。Content-Typeがapplication / jsonに設定されている場合、Bodyに「raw」ではなく「form-data」を誤って選択したことがわかりました。zzyykk123456のスクリーンショットは、Aspnet Githubの問題で参照できます:github.com/aspnet/Home/issues/2202
Chun Lin

これでうまくいきました。Swagger(スワッシュバックル)を使用するコンテンツタイプを設定する必要があります:application / jsonと二重引用符を使用します。
John Henckel、2018年

1
まさに私の問題ですが、Ajaxリクエストでは「data:JSON.stringify( "YourString")」を実行する必要があることに注意する必要があります
Amir Hossein Ahmadi

1
@AmirHosseinAhmadi私はアヤックスと実際に使用してはことを見た上でこれを発生しているJSON.stringify私を起こしていた[frombody]ことをnull。データフィールドを文字列値(つまり、json文字列)に設定した後、それは機能しました。
Nexaspx

19

データモデルとして機能するクラスを作成してから、データモデルクラスのプロパティと一致するプロパティを持つJSONオブジェクトを送信してください。(注:これをテストしましたが、今日ダウンロードした最新のMVC 4 RC 2012で動作します)。

public HttpResponseMessage Post(ValueModel model)
{
    return Request.CreateResponse<string>(HttpStatusCode.OK, "Value Recieved: " + model.Value);
}

public class ValueModel
{
    public string Value { get; set; }
}

以下のJSONオブジェクトはHTTP-POST本文で送信され、コンテンツタイプはapplication / jsonです

{ "value": "In MVC4 Beta you could map to simple types like string, but testing with RC 2012 I have only been able to map to DataModels and only JSON (application/json) and url-encoded (application/x-www-form-urlencoded body formats have worked. XML is not working for some reason" }

データモデルクラスを作成する必要がある理由は、単純な値はurlパラメーターからのものと見なされ、単一の複雑な値は本文からのものと見なされるためです。それらには属性[FromBody][FromUrl]属性がありますが、それでも使用すること[FromBody] string valueはできませんでした。彼らはまだ多くのバグを解決しているようですので、これは将来変更されると確信しています。

編集: 本文で機能するようにXMLを取得しました。デフォルトのXMLシリアライザーは、XmlSerializerではなくDataContractSerializerに変更されました。Global.asaxファイルに次の行を入れると、この問題が修正されました(参照

GlobalConfiguration.Configuration.Formatters.XmlFormatter.UseXmlSerializer = true;

これはrequest.ContentType = "application / json; charset = UTF-8";で私にとってはうまくいきました。
Arvind Krmar

15

何度か試したところ、デフォルトの動作は正しく、ハッキングするものは何もないと思います。

唯一のトリックは次のとおりです。postメソッドの引数がstring以下のようになっている場合、(ajaxまたはpostmanを使用する場合は)二重引用符を本文に含めたプレーンな文字列を送信する必要があります。たとえば、

//send "{\"a\":1}" in body to me, note the outer double quotes
[HttpPost("api1")]
public String PostMethod1([FromBody]string value)
{
    return "received " + value; //  "received {\"a\":1}"
}

そうでなければ、外側の二重引用符とエスケープされた内側の引用符なしでjson文字列を投稿本文に送信すると、モデルクラス(引数の型)に解析できるはずです。たとえば、{"a":1, "b":2}

public class MyPoco{
    public int a;
    public int b;
}

//send {"a":1, "b":2} in body to me
[HttpPost("api2")]
public String PostMethod2([FromBody]MyPoco value)
{
    return "received " + value.ToString();  //"received your_namespace+MyPoco"
}

11

この問題の解決策を数分間探していたので、私の解決策を共有します。

モデルを投稿する場合、モデルには空/デフォルトのコンストラクターが必要です。それ以外の場合は、モデルを作成できません。リファクタリング中は注意してください。;)


ヒントをありがとう、リファクタリングはまさに私をここに押し込みました!
アラン

10

これは私のために働きました:

  1. jQuery / Ajaxから渡すすべての属性のプロパティを使用して、C#DTOクラスを作成します。

    public class EntityData
    {
        public string Attr1 { get; set; }
        public string Attr2 { get; set; }
    }
  2. Web APIメソッドを定義します。

    [HttpPost()]
    public JObject AddNewEntity([FromBody] EntityData entityData)
    {
  3. そのようにWeb APIを呼び出します。

    var entityData = {
        "attr1": "value1",
        "attr2": "value2"
    };
    
    $.ajax({
        type: "POST",
        url: "/api/YOURCONTROLLER/addnewentity",
        async: true,
        cache: false,
        data: JSON.stringify(entityData),
        contentType: "application/json; charset=utf-8",
        dataType: "json",
        success: function (response) {
            ...
        }
    });

これを投稿してくれてありがとう、私は多くのサンプルを試しましたが、これは私のために働きました!
土曜日

10

私と同じようにSwaggerPostmanで同じ問題が発生している場合、「ContentType」が指定されていても、投稿で単純な属性を文字列として渡すと、null値が返されます。

ただ渡す:

MyValue

nullとしてコントローラーに入ります。

しかし、合格した場合:

「マイバリュー」

値は正しくなります。

ここでの引用は違いをもたらしました。もちろん、これはSwaggerとPostman専用です。たとえば、Angularを使用するフロントエンドアプリでは、これはフレームワークによって自動的に解決されます。


6

同じ問題があり、コンテンツタイプを「application / json」に変更しても問題が解決しないことがわかりました。ただし、「application / json; charset = utf-8」は機能しました。


そう、Web APIはcharset = utf-8なしではデシリアライズしません。blog.codenamed.nl/2015/05/12/...
サムRueby

4

Web APIメソッドのリクエストオブジェクトが常にnullであるという同様の問題がありました。コントローラーアクション名の先頭に「Get」が付いているため、Web APIがこれをPOSTではなくHTTP GETとして処理していることに気付きました。コントローラアクションの名前を変更した後、意図したとおりに機能するようになりました。


3

Angularを使用すると、次の形式でデータを渡すことができました。

 data: '=' + JSON.stringify({ u: $scope.usrname1, p: $scope.pwd1 }),
 headers: { 'Content-Type': 'application/x-www-form-urlencoded; charset=utf-8' }

そしてWeb APIコントローラーでは:

    [HttpPost]
    public Hashtable Post([FromBody]string jsonString)
    {
        IDictionary<string, string> data = JsonConvert.DeserializeObject<IDictionary<string, string>>(jsonString);
        string username = data["u"];
        string pwd = data["p"];
   ......

または、次のようにJSONデータを投稿することもできます。

    data: { PaintingId: 1, Title: "Animal show", Price: 10.50 } 

そして、コントローラーで、次のようなクラス型を受け入れます。

    [HttpPost]
    public string POST(Models.PostModel pm)
    {

     ....
    }

どちらの方法でも機能します。APIで確立されたパブリッククラスがある場合は、JSONをポストします。それ以外の場合は、 '=' + JSON.stringify({..:...、..:...})をポストします。


3

私の場合の問題は、パラメーターがオブジェクトではなく文字列であることでした。パラメーターをNewsoft.JsonのJObjectに変更すると機能します。


2

行を追加しています

        ValueProviderFactories.Factories.Add(new JsonValueProviderFactory());

protected void Application_Start()Global.asax.cs の関数の最後まで、ASP.NET MVC3で同様の問題を解決しました。


助けてくれてありがとう、しかし残念ながらそれは助けにはなりませんでした。とりあえず助けてくれるかもしれないので、とりあえずこのままにしておきます!
ianrathbone

XMLを投稿すると同じ問題が発生する
ianrathbone

2

Xml FormatterまたはJSON FormatterにDataContractSerializerを使用している場合は、それを取り除く必要があります。私はこれを私のWebApiConfigファイルに入れました:

public static void Register(HttpConfiguration config)
{
     config.Routes.MapHttpRoute(
           name: "DefaultApi",
           routeTemplate: "api/{controller}/{id}",
           defaults: new { id = RouteParameter.Optional }
     );    

     var jsonFormatter = config.Formatters.OfType<JsonMediaTypeFormatter>().First();
     jsonFormatter.UseDataContractJsonSerializer = true;
}

単純にコメントアウトするjsonFormatter.UseDataContractJsonSerializer = true;と、入力パラメーターはnullでなくなりました。手がかりをくれた 'Despertar'に感謝します。


2

送信したJSONについて確信がある場合は、APIを注意深くトレースする必要があります。

  1. Microsoft.AspNet.WebApi.Tracingパッケージをインストールする
  2. クラス内メソッドを追加config.EnableSystemDiagnosticsTracing();します。WebApiConfigRegister

今度はデバッグ出力を見てください、そしておそらくあなたは無効を見つけるでしょう ModelStateログエントリがます。

場合はModelState無効である、あなたはその中の本当の原因を見つけることができますErrors

誰もそのような例外を推測することはできません:

Could not load file or assembly 'Newtonsoft.Json, Version=9.0.0.0, Culture=neutral, PublicKeyToken=30ad4fe6b2a6aeed' or one of its dependencies. The located assembly's manifest definition does not match the assembly reference. (Exception from HRESULT: 0x80131040)

あなたは私の命を救いました。モデルとしてnullを取得し、パッケージをインストールした後、JSONが正しい形式ではないことがわかりました。
Khizar Iqbal

2

パラメータとしてnullを取得するという同じ問題がありましたが、これは大きなオブジェクトに関連していました。問題はIISの最大長に関連していることが判明しました。web.configで設定できます。

  <system.web>
    <httpRuntime targetFramework="4.7" maxRequestLength="1073741824" />
  </system.web>

Web APIがエラーを抑制してAPIにnullオブジェクトを送信する理由を知りたいのですが。Microsoft.AspNet.WebApi.Tracingを使用してエラーを見つけました。



1

これがこの質問の答えではないことは知っていますが、問題の解決策を探しているときに出会いました。

私の場合、複合型はバインドされていませんでしたが、POSTを実行していませんでした。クエリ文字列パラメーターを使用してGETを実行していました。解決策は、[FromUri]を引数に追加することでした。

public class MyController : ApiController
{
    public IEnumerable<MyModel> Get([FromUri] MyComplexType input)
    {
        // input is not null as long as [FromUri] is present in the method arg
    }
}

これは、GETを使用する場合、リクエストの本文が無視される(そして場合によってはエラーが発生する)ためです。これが機能する理由は、クエリ文字列にparamsを渡していて、GETの場合と同様に
RyBolt

1

私はフィドラーでも同じ問題を抱えていました。私はすでにContent-Type: application/json; charset=utf-8またはContent-Type: application/jsonリクエストヘッダーにありました。

私のリクエストの本文もプレーンな文字列であり、フィドラーでは次のように記述しました{'controller':'ctrl'}。これにより、POSTメソッドの文字列パラメータがになりましたnull

修正:引用符を使用して、文字列を示すことを忘れないでください。つまり、と書いて修正しました"{'controller':'ctrl'}"。(注:JSONを書き込むときは、必ずアポストロフィを使用するか、次のように引用符をエスケープしてください:)"{\"controller\":\"ctrl\"}"


私はポストマンでも同じことをしなければなりませんでした。しかし、Springサービスを呼び出すときにこれを行う必要はありません。.Net側の問題のようです。
Malcolm McRoberts 2017

1

MVC 6に渡す単純なJSONオブジェクトを処理するために見つけた最も単純な方法は、NewtonSoft jObjectのようなpostパラメーターのタイプを取得することです。

public ActionResult Test2([FromBody] jObject str)
{
        return Json(new { message = "Test1 Returned: "+ str }); ;
}

本体をJObjectにキャスト[FromBody] object body, [FromHeader(Name="Content-Type")] string bodyMediaTypeするbodyMediaType == "application.json"前にチェックを行うと、代替案の機会が提供されるため、Test()がより適切に機能します。
VladH 2017年

1

私にとって最良の解決策は、以下のように完全なHTTPを実行することです:

[Route("api/open")]
[HttpPost]
public async Task<string> open(HttpRequestMessage request)
{
    var json = await request.Content.ReadAsStringAsync();
    JavaScriptSerializer jss = new JavaScriptSerializer();            
    WS_OpenSession param = jss.Deserialize<WS_OpenSession>(json);
    return param.sessionid;
}

そして、ポストボディで期待するオブジェクトに文字列をデシリアライズします。私にとって、WS_OpenSessionはセッションID、ユーザー、キーを含むクラスです。

そこからparamオブジェクトを使用して、そのプロパティにアクセスできます。

非常に効果的です。

私はこのURLから供給されたと言いました:

http://bizcoder.com/posting-raw-json-to-web-api


1

複合型の場合、Web APIはメディアタイプフォーマッタを使用して、メッセージ本文から値を読み取ろうとします。

何かあったか確認してください [Serializable]モデルクラスを装飾する属性。

属性を削除して、機能するかどうかを確認します。これでうまくいきました。


1

パーティーには少し遅れますが、コントローラーを使用しているときに渡されたNULL値に遭遇した人は、POSTリクエストの先頭に「=」を追加するだけです。

application / json Content-Type を使用すると、コントローラーもNULL値を渡しました。以下の「application / x-www-form-urlencoded」Content-Typeに注意してください。ただし、APIからの戻り値の型は「application / json」です。

 public static string HttpPostRequest(string url, Dictionary<string, string> postParameters)
    {
        string postData = "=";

        foreach (string key in postParameters.Keys)
        {
            postData += HttpUtility.UrlEncode(key) + "="
                  + HttpUtility.UrlEncode(postParameters[key]) + ",";
        }

        HttpWebRequest myHttpWebRequest = (HttpWebRequest)HttpWebRequest.Create(url);
        myHttpWebRequest.Method = "POST";

        byte[] data = System.Text.Encoding.ASCII.GetBytes(postData);

        myHttpWebRequest.ContentType = "application/x-www-form-urlencoded";
        myHttpWebRequest.ContentLength = data.Length;

        Stream requestStream = myHttpWebRequest.GetRequestStream();
        requestStream.Write(data, 0, data.Length);
        requestStream.Close();

        HttpWebResponse myHttpWebResponse = (HttpWebResponse)myHttpWebRequest.GetResponse();

        Stream responseStream = myHttpWebResponse.GetResponseStream();

        StreamReader myStreamReader = new StreamReader(responseStream, System.Text.Encoding.Default);

        string pageContent = myStreamReader.ReadToEnd();

        myStreamReader.Close();
        responseStream.Close();

        myHttpWebResponse.Close();

        return pageContent;
    }

1

文字列として取得するには、投稿する値のタイプは関係ありません。引用符で囲んでください。複合型ではありません。

javascript:

    var myData = null, url = 'api/' + 'Named/' + 'NamedMethod';

    myData = 7;

    $http.post(url, "'" + myData + "'")
         .then(function (response) { console.log(response.data); });

    myData = "some sentence";

    $http.post(url, "'" + myData + "'")
         .then(function (response) { console.log(response.data); });

    myData = { name: 'person name', age: 21 };

    $http.post(url, "'" + JSON.stringify(myData) + "'")
         .then(function (response) { console.log(response.data); });

    $http.post(url, "'" + angular.toJson(myData) + "'")
         .then(function (response) { console.log(response.data); });

c#:

    public class NamedController : ApiController
    {
        [HttpPost]
        public int NamedMethod([FromBody] string value)
        {
            return value == null ? 1 : 0;
        }
    }

1

[FromBody]アノテーションを配置しても、メソッドへのパラメーターとしてDtoオブジェクトがあり、それでもデータを取得できない場合は、DTOのプロパティとフィールドの調査を開始します。

私のDTOが無効になるという同じ問題がありました。プロパティの1つがシリアル化できないオブジェクトを指していることが原因であることがわかりました:(これにより、メディアフォーマッターはデータの解析に失敗します。したがって、オブジェクトは常にnullでした。他のユーザーにも役立つことを願っています


1

データ型を再確認してください。dotnetモデルバインダーは、floatを整数に変換しません(他の関連する概念を想定しています)。これにより、モデル全体が拒否されます。

あなたがこのようなjsonを持っているなら:

{
    "shoeSize": 10.5
}

しかし、C#モデルは次のようになります。

class Shoe{
    public int shoeSize;
}

モデルバインダーはモデルを拒否し、nullになります。


1

私はこれにかなり遅れていますが、同様の問題があり、ここで多くの答えを調べて背景を取得した1日の後、1つ以上のパラメーターをWeb API 2アクションに返す最も簡単で軽量なソリューションを見つけました続く:

これは、正しいルーティングでWeb APIコントローラー/アクションをセットアップする方法を知っていることを前提としています。参照していない場合は、https//docs.microsoft.com/en-us/aspnet/web-api/overview/getting-started-with -aspnet-web-api / tutorial-your-first-web-api

最初にコントローラーアクションですが、このソリューションにはNewtonsoft.Jsonライブラリも必要です。

[HttpPost]
public string PostProcessData([FromBody]string parameters) {
    if (!String.IsNullOrEmpty(parameters)) {
        JObject json = JObject.Parse(parameters);

        // Code logic below
        // Can access params via json["paramName"].ToString();
    }
    return "";
}

jQueryを使用するクライアント側

var dataToSend = JSON.stringify({ param1: "value1", param2: "value2"...});
$.post('/Web_API_URI', { '': dataToSend }).done(function (data) {
     console.debug(data); // returned data from Web API
 });

私が見つけた重要な問題は、単一の全体的なパラメーターのみをWeb APIに送り返して、名前だけで値がないことを確認することでした。{ '': dataToSend }そうしないと、サーバー側で値がnullになります。

これにより、1つ以上のパラメーターをJSON構造でWeb APIに送信でき、複雑なデータを処理するためにサーバー側で追加のオブジェクトを宣言する必要がありません。JObjectを使用すると、渡されたすべてのパラメータを動的に反復して、時間の経過に伴ってパラメータが変化した場合のスケーラビリティを容易にすることもできます。うまくいけば、私のように苦労していた人を助けてくれるでしょう。


0

本文の単一のパラメーターをWebAPIに正しく渡すと、このコードが機能します $.post(url, { '': productId }

そしてそれを実際に捕まえる [HttpPost] public ShoppingCartAddRemoveViewModel Delete([FromBody]string value)

キーは、魔法の単語「値」を使用することです。また、intやプリミティブ型の場合もあります。content-typeやヘッダーの修正に関係なく、このコードはmvc postアクションでは機能しません。

弊社のサイトを使用することにより、あなたは弊社のクッキーポリシーおよびプライバシーポリシーを読み、理解したものとみなされます。
Licensed under cc by-sa 3.0 with attribution required.