13

私は一生これを理解することはできません。Get メソッドと Post メソッドを備えた Web API コントローラーがあります。Get メソッドはパラメーターの有無にかかわらず正常に動作しますが、String パラメーターを追加しようとするとポストが壊れます。以下は私のコードです。

ルート:

        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "{controller}/{id}",
            defaults: new { id = UrlParameter.Optional }
        );

コントローラ:

public class AuditController : ApiController
{
    public String Post(String test)
    {
        return "Success : " + test;
    }

    public String Get(String test)
    {
        return "Success : " + test;
    }
}

リクエスト:

    var request = WebRequest.Create("http://localhost:42652/Audit");
        request.Method = "POST";
        request.ContentType = "application/x-www-form-urlencoded";
        using (var writer = new StreamWriter(request.GetRequestStream()))
        {
            writer.Write("test=TEST");
        }
        WebResponse webResponse = request.GetResponse();

リクエストに対して多くのバリエーションを試しましたが、何か単純なものが欠けているように感じます。ご協力いただきありがとうございます。

4

2 に答える 2

22

パラメーターtestがリクエストの本文から来ることを期待しているので、FromBody属性で装飾する必要があります。例: ([FromBody]String test). これは、他の複雑な型には当てはまりません。たとえばEmployee、Body から派生していると暗黙的に見なされるクラスです。

GETリクエストを処理しています。クエリ文字列からのテストでのみ機能するはずです/Audit?test=Mike

次のブログ投稿には、パラメーターバインディングの詳細が記載されています。

また、WebRequest を使用しているようです。代わりに System.Net.Http から HttpClient を使用することを検討しましたか?

于 2013-06-11T15:51:21.007 に答える
3

次の属性AuditControllerを含めるように変更します。FromBody

public class AuditController : ApiController
{
    public String Post([FromBody]String test)
    {
        return "Success : " + test;
    }

    public String Get(String test)
    {
        return "Success : " + test;
    }
}

参照。http://msdn.microsoft.com/en-us/library/system.web.http.frombodyattribute(v=vs.108).aspx

于 2013-06-11T15:48:32.420 に答える