私はweb-apiが初めてです。 HTTP POST web-apiを使用してデータを受信します。コンテンツタイプはapplication/x-www-form-urlencoded
で、リクエストの本文は次のようになります。
data={"mac":"0004ED123456","model":"SG6200NXL"}
(JSON形式)。
私のコントローラーは次のようなものです。
public void Post([FromBody]string formData)
{
data.Add(formData);
}
ただし、formDataは常にnullです。リクエストの本文を次のように変更した場合のみ:
={"mac":"0004ED123456","model":"SG6200NXL"}
{"mac":"0004ED123456","model":"SG6200NXL"}
がformData
文字列に保存されていることがわかります。
だから私の質問は、どのようにフォーマットでデータを受け取るべきですか?
data={"mac":"0004ED123456","model":"SG6200NXL"}
?
JSONをC#に脱塩する簡単な方法はありますか?
手伝ってくれてありがとう!
更新:モデルを使用しようとしましたが、まだ機能しません。私のモデルは:
public class Device
{
public string mac { get; set; }
public string model { get; set; }
}
そして私のHTTP POSTリクエストは:
ヘッダ:
User-Agent: Fiddler
Content-type: application/x-www-form-urlencoded
Host: localhost:52154
Content-Length: 46
体:
data={"mac":"0004ED123456","model":"SG6200NX"}
HTTP POSTはルーターによって送信されます。私の仕事はデータを受信することです。]がわかっている限り、Content-type: application/x-www-form-urlencoded
を使用する必要があります。
ここ からの引用:
デフォルトでは、Web APIはリクエストURIから単純型を取得しようとします。 FromBody属性は、リクエスト本文から値を読み取るようにWeb APIに指示します。
Web APIは応答本文を最大1回しか読み取らないため、アクションの1つのパラメーターのみが要求本文から取得できます。リクエスト本文から複数の値を取得する必要がある場合は、複合型を定義します。
次に、クライアントは次の形式で値を送信する必要があります。
= value
特に、単純型の場合、名前/値のペアの名前部分は空でなければなりません。
したがって、data=string
形式でデータを投稿する場合は、複合型を作成する必要があります。
public class MyFormData
{
public string Data { get; set; }
}
そして、コントローラーを次のように更新します。
public void Post(MyFormData formData)
{
//your JSON string will be in formData.Data
}
もちろん、コンテンツタイプをJSONに変更することもできますが、実際には要件によって異なります。
この投稿は古いものですが、答えを探しているときにつまずきました。私が私の仕事を始めた方法を投稿します。誰かが役に立つと思うかもしれません。
リクエストは次のとおりです。
POST /api/values HTTP/1.1
Host: localhost:62798
Accept: text/json
Content-Type: application/x-www-form-urlencoded
Cache-Control: no-cache
Postman-Token: 51ee1c5f-acbb-335b-35d9-d2b8e62abc74
UID=200&EMAIL=john%40jones.com&FIRST_NAME=John&LAST_NAME=jones&PHONE=433-394-3324&CITY=Seattle&STATE_CODE=WA&Zip=98105
モデルは次のとおりです。
public class SampleModel{
public string UID { get; set; }
public string Email { get; set; }
public string First_Name { get; set; }
public string Last_Name { get; set; }
public string Phone { get; set; }
public string City { get; set; }
public string State_Code { get; set; }
public string Zip { get; set; }
}
そしてここに、POSTメソッドがあります。これは自動で(FromBody)がurlencoded値をモデルに変換します。
public HttpResponseMessage Post([FromBody] SampleModel value){
私はどんな価値も選ぶことができました。
SearchCity(value.City);
SearchName(value.Last_Name);
次のようなデータのオブジェクトを作成する必要があります。
public class Device
{
public string mac {get;set;}
public string model {get;set;}
}
次に、コントローラーのアクションメソッドを次のように変更し、オブジェクトを消費からこのメソッドに渡します
public void Post(Device deviceData)
{
// You can extract data like deviceData.mac, deviceData.model etc
data.Add(deviceData);
}
人気のあるライブラリの1つを使用できます json.net C#のjsonオブジェクトのシリアル化/非シリアル化に
モデルを作成する
public class MyClass {
public string mac { get; set; }
public string model { get; set; }
}
.net JavaScriptSerializer()。Deserializeを使用します
public void Post([FromBody]string formData){
MyClass obj = new System.Web.Script.Serialization.JavaScriptSerializer().Deserialize<MyClass>(formData);
//get mac and model by obj.mac obj.model
}
乾杯:)
Content-type:application/x-www-form-urlencodedを使用している場合、JSONの受信は期待できません。
フォームを使用してデータをWeb Apiコントローラーに送信していると思いますか?
最初にContent-typeをapplication/jsonに変更する必要があります。リクエスト本文でJSONデータを送信していることを確認する必要があります。フォームを介してデータを送信する場合、javascriptを使用してフォームデータからJSONオブジェクトを作成できます。
C#でJSONをデシリアライズするには、Json.NETをお勧めします: http://json.codeplex.com/