6

Visual Studio 2012 テンプレートから構築された既定の mvc Web API インスタンスがあります。デフォルトの ValuesController に次のルートと post メソッドがあります。MVC サイトは、Post メソッドの内容以外は最初の作成から変更されていません。また、Azure をターゲットにする予定なので、.NET Framework 4.0 を使用しています。

登録方法

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

および Post メソッド

    // POST api/values
    public string Post([FromBody]string value)
    {
        if (value != null)
        {
            return "Post was successful";
        }
        else
            return "invalid post, value was null";
    }

HttpClient を使用してサービスへの投稿をシミュレートするコンソール アプリケーションを作成しましたが、残念ながら、Post に入ってくる「値」は常に null です。Post メソッドは、HttpClient での PostAsync 呼び出しに続いて正常にヒットします。

渡した StringContent が値に含まれるようにリクエストをマッピングする方法が明確ではありません...

    static void Main(string[] args)
    {
        string appendUrl = string.Format("api/values");
        string totalUrl = "http://localhost:51744/api/values";
        HttpClient client = new HttpClient();
        client.DefaultRequestHeaders.Add("Accept", "application/xml");

        string content = "Here is my input string";
        StringContent sContent = new StringContent(content, Encoding.UTF8, "application/xml");

        HttpResponseMessage response = null;
        string resultString = null;

        client.PostAsync(new Uri(totalUrl), sContent).ContinueWith(responseMessage =>
            {
                response = responseMessage.Result;
            }).Wait();

        response.Content.ReadAsStringAsync().ContinueWith(stream =>
            {
                resultString = stream.Result;
            }).Wait();          
    }

私はMVC Web APIとHttpClientの使用に不慣れです-正しい方向に私を向ける助けがあれば大歓迎です。

4

1 に答える 1

6

次のコードを試してください。

class Program {

    static void Main(string[] args) {

        HttpClient client = new HttpClient();
        var content = new StringContent("=Here is my input string");
        content.Headers.ContentType = new MediaTypeHeaderValue("application/x-www-form-urlencoded");
        client.PostAsync("http://localhost:2451/api/values", content)
            .ContinueWith(task => {

                var response = task.Result;
                Console.WriteLine(response.Content.ReadAsStringAsync().Result);
            });

        Console.ReadLine();
    }
}

このブログ投稿の「SendingSimpleTypes」セクションをご覧ください:http //www.asp.net/web-api/overview/working-with-http/sending-html-form-data,-part-1

于 2012-11-03T15:05:18.140 に答える