C# と VB.NET の質問掲示板

ASP.NET、C++/CLI、Java 何でもどうぞ

C# と VB.NET の入門サイト

WebAPIで FromBody(string)がnull

[トピック内 16 記事 (1 - 16 表示)]  << 0 >>

■103235 / inTopicNo.1)  WebAPIで FromBody(string)がnull
  
□投稿者/ ded (1回)-(2024/07/08(Mon) 18:29:03)

分類:[ASP.NET (C#)] 

Framework 4.8
VS2022
Win10
C# 11
-----
.Net Coreではなく、FrameworkのWeb APIです。
idは正しく取得できていますが、[FromBody]のValueがnullです。
Body部のjsonはStringで取得後、自前で逆シリアライズを行います。

※[FromBody] String valueではなく、GetTest value(または[FromBody] GetTest value)にした場合は成功しますが、stringで取得したいです。
※[FromBody] String valueではなく、dynamic valueの場合は成功しますが、略

-----調べたこと
下記一通り※英語が拙く、勘違いしている可能性あり
https://stackoverflow.com/questions/22741943/web-api-post-body-object-always-null

----- HTTP Header
POST /api/Test/hoge HTTP/1.1
Content-Length: 26
Content-Type: application/json
Host: localhost:54264
{"From": "123","To":"ABC"}

----- GetTest.cs
public class GetTest
{
    public string From { get; set; }
    public string To { get; set; }

    public GetTest()
    {

    }
}



-----TestController.cs
public class TestController : ApiController
{
    public string Post(string id, [FromBody] string value)
    {
        //var value = string.Empty;
        var Result = string.Empty;         <= break point
        string sCmd = id;
        string sId = string.Empty;
        string sKey = string.Empty;
        JsonSerializerOptions options = new JsonSerializerOptions
        {
            Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
            WriteIndented = false
        };
...

引用返信 編集キー/
■103237 / inTopicNo.2)  Re[1]: WebAPIで FromBody(string)がnull
□投稿者/ 魔界の仮面弁士 (3791回)-(2024/07/09(Tue) 10:09:10)
No103235 (ded さん) に返信
> idは正しく取得できていますが、[FromBody]のValueがnullです。

application/x-www-form-urlencoded の Content-Type でリクエストしたら届きませんか?
cUrl コマンドで動作確認してみました。URL は適宜変更してください。


curl -X POST -d "id=abc&value=xyz" -include "http://localhost:43138/Test/Post"
⇒ id=="abc", value=="xyz"

curl -X POST -d "value=12345" -include "http://localhost:43138/Test/Post?id=56789"
⇒ id=="56789", value=="12345"

curl -X POST -d "id=bodyId&value=bodyValue" -include "http://localhost:43138/Test/Post?id=queryId"
⇒ id=="bodyId", value=="queryValue"

curl -X POST -d "value=%E9%AD%94%E7%95%8C%E3%81%AE%E4%BB%AE%E9%9D%A2%E5%BC%81%E5%A3%AB" -include "http://localhost:43138/Test/Post?id=112233"
⇒ id=="112233", value=="魔界の仮面弁士"

curl -X POST -d "id=test&value=%E9%AD%94%E7%95%8C%E3%81%AE%E4%BB%AE%E9%9D%A2%E5%BC%81%E5%A3%AB" -include "http://localhost:43138/Test/Post"
⇒ id=="test", value=="魔界の仮面弁士"

curl -X POST -d "id=body&value=%E9%AD%94%E7%95%8C%E3%81%AE%E4%BB%AE%E9%9D%A2%E5%BC%81%E5%A3%AB" -include "http://localhost:43138/Test/Post?id=uri"
⇒ id=="body", value=="魔界の仮面弁士"

curl -X POST --data-urlencode "id=body&value=魔界の仮面弁士" -include "http://localhost:43138/Test/Post"
⇒ id=="body&value=魔界の仮面弁士", value==null

curl -X POST --data-urlencode "id=body&value=%E9%AD%94%E7%95%8C%E3%81%AE%E4%BB%AE%E9%9D%A2%E5%BC%81%E5%A3%AB" -include "http://localhost:43138/Test/Post"
⇒ id=="body&value=%E9%AD%94%E7%95%8C%E3%81%AE%E4%BB%AE%E9%9D%A2%E5%BC%81%E5%A3%AB", value==null

引用返信 編集キー/
■103238 / inTopicNo.3)  Re[1]: WebAPIで FromBody(string)がnull
□投稿者/ WebSurfer (2909回)-(2024/07/09(Tue) 11:03:37)
No103235 (ded さん) に返信

> stringで取得したいです。

理由は何でしょう?
引用返信 編集キー/
■103239 / inTopicNo.4)  Re[1]: WebAPIで FromBody(string)がnull
□投稿者/ WebSurfer (2910回)-(2024/07/09(Tue) 12:35:47)
No103235 (ded さん) に返信

string 型として取得したい理由、聞いても返事がないので分かりませんが、XY 問題になっ
ているような気がします。

(XY 問題とは、質問者に X という課題があって、質問者が Y という解決策を考えついて、
質問には X は書かないで Y について質問したが、Y は X の解決策とはなっておらず、回
答者と質問者間で話がかみ合わず、一向に解決にならないということです)

普通に .NET Framework 版 ASP.NET Web API の組み込みの機能を使ったやり方、すなわち、

> [FromBody] String valueではなく、GetTest value

で、組み込みのデシリアライザが JSON 文字列を GetTest オブジェクトにデシリアライズ
した後でも X には対応できるような気がします。

X も書いてもらえれば、Y の方法でなくても、X はこうすれば実現できるというような回答
が出てくるかもしれません。

ASP.NET Web API でもクライアントから送信されてきたデータはアクションメソッドの引数
にバインドされますが、その仕組みはいろいろややこしいのです。詳しくは以下の記事を見
てください。

ASP.NET Web API のバインディング
http://surferonwww.info/BlogEngine/post/2018/09/11/aspnet-web-api-parameter-binding.aspx

どうしても string 型として取得しなければならないのであれば、上の記事に書いてあるよ
うに、

(1) 送信するデータが value だとすると、=value という形で送信しないとダメ

(2) Content-Type に application/json を設定する null が渡されてしまうので
  application/x-www-form-urlencoded としないとダメ

・・・という点に要注意です。
引用返信 編集キー/
■103240 / inTopicNo.5)  Re[1]: WebAPIで FromBody(string)がnull
□投稿者/ 魔界の仮面弁士 (3792回)-(2024/07/09(Tue) 13:14:35)
No103235 (ded さん) に返信
> Framework 4.8
> C# 11
既定では言語バージョン 7.3 となるはずですが、
意図的に LangVer を 11 にまで上げているのですか?


■103237 / (魔界の仮面弁士) に追記
> application/x-www-form-urlencoded の Content-Type でリクエストしたら届きませんか?
MVC コントローラーは、Content-Type によって振る舞いを変えるので、
たとえば Content-Type: text/plain だったりすると、[FromBody] で受け取れません。

>> Body部のjsonはStringで取得後、自前で逆シリアライズを行います。
Content-Type に依存させることなく、body 部を受け取りたいのであれば、
 var tb = Request.TotalBytes;
 string rawJson = (tb == 0) ? null : Encoding.UTF8.GetString(Request.BinaryRead(tb));
などとすることもできます。
引用返信 編集キー/
■103242 / inTopicNo.6)  Re[2]: WebAPIで FromBody(string)がnull
□投稿者/ 魔界の仮面弁士 (3793回)-(2024/07/09(Tue) 14:04:50)
No103240 (魔界の仮面弁士) に追記
> var tb = Request.TotalBytes;
> string rawJson = (tb == 0) ? null : Encoding.UTF8.GetString(Request.BinaryRead(tb));
訂正。

public string Post(string id, [FromBody] string value)
{
 // // .NET Framework 4.8 + C# 11
 using var ms = new MemoryStream();
 if (Request.InputStream.CanSeek) { Request.InputStream.Position = 0; }
 Request.InputStream.CopyTo(ms);
 string rawJson = Encoding.UTF8.GetString(ms.ToArray());

 // 以下略
}


> MVC コントローラーは、Content-Type によって振る舞いを変える

curl -X POST -H "Content-Type:application/json;charset=UTF-8" --data-raw "{\"id\":\"jsonId\",\"value\":\"jsonValue\"}" --include "http://localhost:43138/Test/Post"
⇒ id=="jsonId", value=="jsonValue"
⇒ Request.InputStream → 「{"id":"jsonId","value":"jsonValue"}」

curl -X POST -H "Content-Type:application/x-www-form-urlencoded" --data-raw "{\"id\":\"jsonId\",\"value\":\"jsonValue\"}" --include "http://localhost:43138/Test/Post"
⇒ id==null, value==null
⇒ Request.InputStream → 「{"id":"jsonId","value":"jsonValue"}」

curl -X POST -H "Content-Type:text/plain;charset=UTF-8" --data-raw "{\"id\":\"jsonId\",\"value\":\"jsonValue\"}" --include "http://localhost:43138/Test/Post"
⇒ id==null, value==null
⇒ Request.InputStream → 「{"id":"jsonId","value":"jsonValue"}」

curl -X POST -H "Content-Type:application/xml" --data-raw "<x><id>xmlId</id><value>xmlValue</value></x>" --include "http://localhost:43138/Test/Post"
⇒ id==null, value==null
⇒ Request.InputStream → 「<x><id>xmlId</id><value>xmlValue</value></x>」
引用返信 編集キー/
■103243 / inTopicNo.7)  Re[2]: WebAPIで FromBody(string)がnull
□投稿者/ ded (4回)-(2024/07/09(Tue) 14:49:28)
返信遅くなり申し訳ありません。

No103237 (魔界の仮面弁士 さん) に返信

> application/x-www-form-urlencoded の Content-Type でリクエストしたら届きませんか?
> cUrl コマンドで動作確認してみました。URL は適宜変更してください。
 application/x-www-form-urlencodedでも取得できませんでした。

 Talend API Tester+Edgeで試していましたが、
 curlでも試してみます。


No103238 WebSurfer さん

>> stringで取得したいです。
>理由は何でしょう?

 社内共通基盤のルール上です。
 クラスにバインディングする前に、社内共通基盤のバリデーションチェックを受ける必要があります。
 こちらがStringです。


No103239 WebSurfer さん

 ごめんなさい。午前中は打ち合わせが入っていた関係で返信が遅れました。
 これはもう「社内ルールのため」以上の回答は無いです。
 処理する前に情シス部門のバリデーションチェックを受けろという意味かと。
 何をチェックしているかはわかりません。ILまで見る気もありません。


 「ASP.NET Web API のバインディング」のサイト
 ごめんなさい。コンテンツフィルタリングでブロックされていますので、見られません。
 自宅で確認しますので、お待ちください。


>(1) 送信するデータが value だとすると、=value という形で送信しないとダメ
>(2) Content-Type に application/json を設定する null が渡されてしまうので
>  application/x-www-form-urlencoded としないとダメ

 魔界の仮面弁士さんのテストコードと組み合わせると、
 個人的には納得なのですが、Getのパラメータと変わらない感じになるのでしょうか?
 
 TestControllerの通り今回質問する為のミニマムコードですが、
 本番はアプリ(Web/WinForm共通)<==>API間で、複雑なデータをやり取りすることを考えています。


■103240 (魔界の仮面弁士 さん) に返信
>> Framework 4.8
>> C# 11
>既定では言語バージョン 7.3 となるはずですが、
>意図的に LangVer を 11 にまで上げているのですか?

はい。意図的に上げています。

>> application/x-www-form-urlencoded の Content-Type でリクエストしたら届きませんか?
>MVC コントローラーは、Content-Type によって振る舞いを変えるので、
>たとえば Content-Type: text/plain だったりすると、[FromBody] で受け取れません。

Content-Typeは「application/json」「application/x-www-form-urlencoded」で試しています。


>> MVC コントローラーは、Content-Type によって振る舞いを変える
Request.InputStreamですか。頭にありませんでした。
試してみます。
引用返信 編集キー/
■103244 / inTopicNo.8)  Re[3]: WebAPIで FromBody(string)がnull
□投稿者/ ded (5回)-(2024/07/09(Tue) 14:59:30)
No103243 (ded さん) に返信
> >> MVC コントローラーは、Content-Type によって振る舞いを変える
> Request.InputStreamですか。頭にありませんでした。
> 試してみます。

Request.InputStreamでInputStreamが無いのであれ?ってなったので、
調べてみたところ下記でした。

イミディエイト
>?Request.GetType().FullName
>"System.Net.Http.HttpRequestMessage"

System.Web.HttpRequestが正しい気がします。
変なNuGetでも読んだのですかね?

取り急ぎ報告です。
再構築してみます。

引用返信 編集キー/
■103245 / inTopicNo.9)  Re[3]: WebAPIで FromBody(string)がnull
□投稿者/ WebSurfer (2911回)-(2024/07/09(Tue) 16:00:58)
No103243 (ded さん) に返信

> 「ASP.NET Web API のバインディング」のサイト
> ごめんなさい。コンテンツフィルタリングでブロックされていますので、見られません。
> 自宅で確認しますので、お待ちください。

以下の Microsoft の記事も読めませんか?

How WebAPI does Parameter Binding
https://learn.microsoft.com/ja-jp/archive/blogs/jmstall/how-webapi-does-parameter-binding

先の回答で紹介した記事は上の記事の内容の一部を以下のようにまとめて、

(1) Model Binding または Formatters を利用するという 2 つの方法があって、Web API の
  場合は、クエリ文字列からパラメータを取得する場合は Model Binding を、ボディから
  取得する場合は Formatter を使う。

(2) string などのプリミティブ型をアクションメソッドの引数にした場合、引数に属性が付
  与されてなければクエリ文字列からパラメータを探してモデルバインディングする。

(3) コンプレックス型(例:記事の Customer クラス、下のコードの Hero クラス)の場合、
  デフォルトでは Formatter を使ってボディからパラメータを取得する。

それらの点を踏まえたサンプルコードを書いたものです。

そのサンプルコードの中に、

public List<Hero> Put(int id, [FromBody] string name)
{
heroes[id - 1].Name = name;
return heroes;
}

・・・というアクションメソッドがあって、文字列をボディに含めて送信した時、その引数
の name に文字列をバインドするにはどうしたらいいかということが書いてあります。それ
は先の回答で書いたように以下の通りです。

(1) 送信するデータが value だとすると、=value という形で送信しないとダメ

(2) Content-Type に application/json を設定する null が渡されてしまうので
  application/x-www-form-urlencoded としないとダメ

質問者さんの例でいうと、

POST /api/Test/hoge HTTP/1.1
Content-Length: 27
Content-Type: application/x-www-form-urlencoded
Host: localhost:54264
={"From": "123","To":"ABC"}


> 魔界の仮面弁士さんのテストコードと組み合わせると、
> 個人的には納得なのですが、Getのパラメータと変わらない感じになるのでしょうか?

違います。よく読んでください。
引用返信 編集キー/
■103246 / inTopicNo.10)  Re[3]: WebAPIで FromBody(string)がnull
□投稿者/ WebSurfer (2912回)-(2024/07/09(Tue) 16:32:44)
No103242 (魔界の仮面弁士 さん) に返信

> MVC コントローラーは、Content-Type によって振る舞いを変える

そういうわけではなくて、以下の Microsoft の記事によると、

How WebAPI does Parameter Binding
https://learn.microsoft.com/ja-jp/archive/blogs/jmstall/how-webapi-does-parameter-binding

"WebAPI uses model binding to read from the query string and Formatters to
read from the body."

ということだそうで、今回のケースでは Formatters を使ことになります。そして、

"WebAPI gets the list of formatters from the HttpConfiguration, and then uses
the request's content-type to select an appropriate formatter."

と書いてあるように、content-type によってそれに適切な formatter を選択する
ということだそうです。

"{\"id\":\"jsonId\",\"value\":\"jsonValue\"}" という JSON 文字列を送信した
ようですが、Content-Type:application/json 以外で null になったのは、選択さ
れた formatter が適切ではなかったということでしょう。

引用返信 編集キー/
■103247 / inTopicNo.11)  Re[4]: WebAPIで FromBody(string)がnull
□投稿者/ 魔界の仮面弁士 (3794回)-(2024/07/09(Tue) 16:33:40)
No103244 (ded さん) に返信
> Request.InputStreamでInputStreamが無いのであれ?ってなったので、
> 調べてみたところ下記でした。
>
> イミディエイト
> >?Request.GetType().FullName
> >"System.Net.Http.HttpRequestMessage"

あぁ、失礼しました。ApiController でしたね。
コントローラークラスの既定クラスを読み違えていました。

System.Web.Http.ApiController クラスの Request プロパティ
 ⇒ public System.Net.Http.HttpRequestMessage Request { get; set; }

System.Web.Mvc.Controller クラスの Request プロパティ
 ⇒ public System.Web.HttpRequestBase Request { get; }

Microsoft.AspNetCore.Mvc.Controller クラスの Request プロパティ
 ⇒ public Microsoft.AspNetCore.Http.HttpRequest Request { get; }


パラメーター バインド後は、入力ストリームに再アクセスできません。
(パラメーターのバインドが行われていなければ読み取れますが)
 // string rawJson = await Request.Content.ReadAsStringAsync();
 string rawJson = Request.Content.ReadAsStringAsync().Result;


一応、ApiController でパラメーターバインド後であっても、
 using var ms = new MemoryStream();
 var inStm = HttpContext.Current.Request.InputStream;
 if (inStm.CanSeek)
 {
  inStm.Position = 0;
  inStm.CopyTo(ms);
 }
 string rawJson = Encoding.UTF8.GetString(ms.ToArray());
とすれば読み取れる可能性があります。
ただし、暗号化複合処理などといった前処理フィルターを仕込んでいる処理系だと、期待動作しないかもしれません。
引用返信 編集キー/
■103248 / inTopicNo.12)  Re[5]: WebAPIで FromBody(string)がnull
□投稿者/ ded (6回)-(2024/07/09(Tue) 17:04:23)
WebSurfer さん、魔界の仮面弁士さん

ありがとうございました。

「Talend API Tester」と「curl」で無事に取得できるようになりました。

原因はWebSurfer さんの推察通り、formatterが適切ではなかった様です。
Content-Typeを「application/x-www-form-urlencoded」
Bodyを「={"From": "123","To":"ABC"}」
にする事で、期待通りの結果が返ってきました。


以下TT
-----Talend API Tester
METHOD:POST
URI:http://localhost:54264/api/Test/hoge
HEADRES:Content-Type:application/x-www-form-urlencoded
BODY:={"From": "123","To":"ABC"}

-----ヘッダ
POST /api/Test/hoge HTTP/1.1
Content-Length: 27
Content-Type: application/x-www-form-urlencoded
Host: localhost:54264
={"From": "123","To":"ABC"}

-----curl
url -X POST -H "Content-Type:application/x-www-form-urlencoded" -d "={\"From\": \"123\",\"To\":\"ABC\"}" -i http://localhost:54264/api/Test/hoge
HTTP/1.1 200 OK
Cache-Control: no-cache
Pragma: no-cache
Content-Type: application/json; charset=utf-8
Expires: -1
Server: Microsoft-IIS/10.0
X-AspNet-Version: 4.0.30319
X-SourceFiles: =<<念のためマスク>>
X-Powered-By: ASP.NET
Date: Tue, 09 Jul 2024 07:41:35 GMT
Content-Length: 33

<<念のためマスク>>

----- GetTest.cs
public class GetTest
{
    public string From { get; set; }
    public string To { get; set; }

    public GetTest() { }
}

-----コントローラ(一部)
/// <summary>Test コントローラー</summary>
public class TestController : ApiController
{
    public string Post(string id, [FromBody] string arg1)
    {
        var value = arg1.ToString();
        var Result = string.Empty;
        string sCmd = id;
        string sId = string.Empty;
        string sKey = string.Empty;
        JsonSerializerOptions options = new JsonSerializerOptions
        {
            Encoder = JavaScriptEncoder.Create(UnicodeRanges.All),
            WriteIndented = false
        };
...


解決済み
引用返信 編集キー/
■103249 / inTopicNo.13)  Re[4]: WebAPIで FromBody(string)がnull
□投稿者/ 魔界の仮面弁士 (3795回)-(2024/07/09(Tue) 17:19:01)
No103246 (WebSurfer さん) に返信
> 以下の Microsoft の記事によると、
> ということだそうで、今回のケースでは Formatters を使ことになります。

まさにその話かと。そして SupportedMediaTypes に応じて、左記のとおり
>>> Content-Type によって振る舞いを変える
ということですよね?

既定のテンプレートだと、下記の 4 種の Formatter が組み込まれていて、
それぞれ、下記のメディアタイプが割り当てられています。

1)JsonMediaTypeFormatter
  ⇒ application/json
  ⇒ text/json
2)XmlMediaTypeFormatter
  ⇒ application/xml
  ⇒ text/xml
3)FormUrlEncodedMediaTypeFormatter
  ⇒ application/x-www-form-urlencoded
4)System.Web.Http.ModelBinding.JQueryMvcFormUrlEncodedFormatter
  ⇒ application/x-www-form-urlencoded

標準ではプレーンテキスト向けの Formatter が組み込まれていないため、先に述べたように
>>> たとえば Content-Type: text/plain だったりすると、[FromBody] で受け取れません。
のような動作になります。

もちろん、カスタムの Formatter を用意して、それをあらかじめ仕込んでおけば
application/json に対して、POST 時の [FromBody] パラメーターで本文を受け取らせるようにもできますし、
text/plain な要求を処理することも可能ではありますね。

以下、超手抜き実装。

// GlobalConfiguration.Configuration.Formatters.Add(new ExampleFormatter());
public sealed class ExampleFormatter : System.Net.Http.Formatting.BufferedMediaTypeFormatter
{
  public ExampleFormatter() => SupportedMediaTypes.Add(new MediaTypeHeaderValue("text/plain"));
  public override bool CanWriteType(Type type) => false;
  public override bool CanReadType(Type type) => type == typeof(string);
  public override object ReadFromStream(Type type, Stream readStream, HttpContent content, IFormatterLogger formatterLogger)
  {
    using var ms = new System.IO.MemoryStream();
    readStream.CopyTo(ms);
    return System.Text.Encoding.UTF8.GetString(ms.ToArray());
  }
}

Global.asax.cs の段階で組み込むとなると影響範囲もその分大きくなるので、
各メソッド側で個別に InputSream を呼び出すのと、どちらが良いか…?
引用返信 編集キー/
■103250 / inTopicNo.14)  Re[5]: WebAPIで FromBody(string)がnull
□投稿者/ 魔界の仮面弁士 (3796回)-(2024/07/09(Tue) 17:39:17)
2024/07/09(Tue) 19:59:12 編集(投稿者)

既に解決済みになっていたので、チェック付け直し。

No103247 (魔界の仮面弁士) に追記
> 一応、ApiController でパラメーターバインド後であっても、
(中略)
> とすれば読み取れる可能性があります。

ここで「可能性がある」と書いたのは、そもそもパラメーターバインドされた場合は
request stream の二度読みがサポートされているわけでは無いからです。

System.Web.Http.ApiController クラスは、request stream に対して
CanSeek == false になる可能性があり、その場合はこの方法が使えません。

一方 System.Web.Mvc.Controller クラスであれば、リクエスト本文が
バッファリングされるため、No103242 のように本文を繰り返し読み取ることができます。

解決済み
引用返信 編集キー/
■103251 / inTopicNo.15)  Re[6]: WebAPIで FromBody(string)がnull
□投稿者/ WebSurfer (2913回)-(2024/07/10(Wed) 12:29:09)
No103248 (ded さん) に返信

今更ながらですが・・・

先に紹介した MSDN Blog の記事、

How WebAPI does Parameter Binding
https://learn.microsoft.com/ja-jp/archive/blogs/jmstall/how-webapi-does-parameter-binding

の最初のコードにある HttpRequestMessage を引数に持つアクションメソッドで、引数から
HttpContent を取得し、HttpContent.ReadAsStringAsync メソッドでコンテンツを取得する
手段もあります。

具体的には例えば先に紹介した私のブログの記事、

ASP.NET Web API のバインディング
http://surferonwww.info/BlogEngine/post/2018/09/11/aspnet-web-api-parameter-binding.aspx

の Web API の Post アクションメソッド、

// POST api/values  (Create...レコード追加)
public List<Hero> Post(Hero postedHero)
{
    heroes.Add(postedHero);
    return heroes;
}

を以下のように変更して jsonString 変数にボディに含まれて送信されてきた JSON 文字
列を取得できます。それをデシリアライズして Add すれば上のコードと同じ結果が得ら
れます。

public async Task<List<Hero>> Post(HttpRequestMessage request)
{
    HttpContent content = request.Content;
    string jsonString = await content.ReadAsStringAsync();
    var postedHero = JsonConvert.DeserializeObject<Hero>(jsonString);
    heroes.Add(postedHero);
    return heroes;
}

引用返信 編集キー/
■103252 / inTopicNo.16)  Re[5]: WebAPIで FromBody(string)がnull
□投稿者/ WebSurfer (2914回)-(2024/07/10(Wed) 12:33:23)
「解決済み」マークをつけ忘れました
解決済み
引用返信 編集キー/

このトピックをツリーで一括表示


トピック内ページ移動 / << 0 >>

このトピックに書きこむ