2

複雑なオブジェクトを MVC4 Web API コントローラーに送信しようとしています:

public class DnsController : ApiController
{

        public IEnumerable<DnsARecord> GetDnsARecords(DnsServer dnsServer, string domainName)
        {...

そして、これを HttpClient から呼び出すことを期待しています:

var httpClient = new HttpClient();

        // Send a request asynchronously continue when complete
        httpClient.GetAsync(dnsApiUrl).ContinueWith(...

上記のコードは、「HttpClient の紹介」サンプルから借用したものです。コードはページにリストされています。

2つのパラメーターをどのように渡す必要があるのか​​ 疑問に思っていました。前処理が必要だと思います。

4

3 に答える 3

1

HTTP-GET クエリ文字列には、必要な数のパラメーターを渡すことができます。ルート テンプレートをサーバーに追加するだけです。

var server = new HttpSelfHostServer();
server.Routes.MapHttpRoute("DnsQuery", "api/{controller}/dnsserver={DnsServer}&domain={domainName}");

dnsserver と domain に渡された値は、GET メソッドのパラメーターにマップされます。


編集: または、HTTP POST の本文で複雑なオブジェクトを渡すこともできます。選択できる 3 つのネイティブ形式は、JSON、XML、または UrlEncoded クエリ文字列です。MVC4 は、これらのデータ形式を文字列などの単純な変数にマップする方法を認識しています (xml 要素名が、マップ先のパラメーターと同じ名前であることを確認してください。また、要求を送信するクライアントは、コンテンツ タイプが適切な値に設定します (Application/JSON、Text/XML、application/x-www-form-urlencoded)。

<DnsInfo>
    <DnsServer>0.0.0.0</DnsServer>
    <Domain>YourDomain.com</Domain>
</DnsInfo>

複合型を作成することもでき、それはそれにデシリアライズされます

void Post(DnsInfo info) : ApiController
{
}

public class DnsInfo
{
    public string DnsServer { get; set; }
    public string Domain { get; set; }
}

この方法の利点は、パラメーターが多すぎる場合に役立つことです。代わりに、それらをクラスに編成することをお勧めします。さらに、機密情報を渡す場合、これらはブラウザなどによってキャッシュされる可能性があるため、URL でクエリ文字列を使用したくありません。

于 2012-03-19T10:17:55.593 に答える
0

API メソッドの入力パラメーターを 1 つ保持し、URL パラメーターを使用してすべての追加パラメーターを指定する必要があります。

そして、次のようにメソッドを呼び出します。

  http:/localhost/MyApp/Dns/GetDnsARecords/ns1.x.com?domainName=mywebsite.com

メソッドでは、次のようにして値をキャッチするだけです

   var domainName = HttpContext.Current.Request["domainName"];
于 2012-04-24T00:01:46.987 に答える
-1

投稿を取得するには、データをURLに入力する必要があるとリクエストします。たぶんあなたはURLフォームフォーマッターを使うことができますか?APIはどのように見えますか?

于 2012-02-27T16:51:50.777 に答える