我正在尝试将复杂对象发送到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(...
我从"Introduction to HttpClient"示例中借用了上述代码 - 代码列在页面上。
我想知道我应该如何传递这两个参数。我假设需要进行一些预处理。
答案 0 :(得分:1)
您可以在HTTP-GET查询字符串中传递任意数量的参数。只需将路由模板添加到服务器即可。
var server = new HttpSelfHostServer();
server.Routes.MapHttpRoute("DnsQuery", "api/{controller}/dnsserver={DnsServer}&domain={domainName}");
传递给dnsserver和域的值现在将映射到您的GET方法参数。
编辑: 或者,您也可以在HTTP POST的正文中传递复杂对象。您可以选择的三种本机格式是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中使用查询字符串,因为这些信息可以由浏览器等缓存。
答案 1 :(得分:0)
您应该为您的API方法保留一个输入参数,并使用URL参数提供所有其他参数。
并按如下方式调用您的方法:
http:/localhost/MyApp/Dns/GetDnsARecords/ns1.x.com?domainName=mywebsite.com
在您的方法中,您只需通过执行
来捕获值 var domainName = HttpContext.Current.Request["domainName"];
答案 2 :(得分:-1)
我认为对于获取帖子,您要求数据必须进入网址。也许你可以使用URL Form Formatter? API如何?