ASP.NET - 使用多个不同参数调用和处理Web API

时间:2016-11-15 17:01:23

标签: c# asp.net asp.net-web-api

我是Web API的新手,我有一个无法解决的问题。

这是我的问题:如何调用需要多个参数的Web API(流或对象以及两个或三个字符串)?如何在Web API中处理这些参数?

例如,我的Web API中有这个方法:

#this is Testing of date : [25/Nov/11:07:20:10]

其中Stream是文件流(或其他情况下的对象)。 如何将所有这些参数添加到客户端请求体?如何从那里拿出来并在方法中使用?

修改: 这个解决方案好吗? 在这里客户:

public class MyController : ApiController
{
    [HttpPost]
    public MyObject Method(Stream s, string first, string second)
    {
        // take the parameters and do something
    }
}

这里是Web API:

{
        var client = new HttpClient();
        var queryString = HttpUtility.ParseQueryString(string.Empty);

        queryString["first"] = "true";
        queryString["second"] = "false";
        var uri = "https://myapi.com/api/mycontroller/method?" + queryString;

        HttpResponseMessage response;

        byte[] byteData = Encoding.UTF8.GetBytes(myFile);

        using (var content = new ByteArrayContent(byteData))
        {
           content.Headers.ContentType = new MediaTypeHeaderValue("<application/json >");
           response = await client.PostAsync(uri, content);
        }

    }

1 个答案:

答案 0 :(得分:0)

WebApi不支持以这种方式传递多个参数,只需创建一个dto / model类并将该类从body传递给该方法。

public class Foo
{
    public Byte[] s {get;set;}
    public string first {get;set;}
    public string second {get;set;}
}

WepApi控制器:

public HttpResponseMessage Register([FromBody] Foo foo) 
{
    //do something
    return Ok();
}

<强>更新

如果您不想为每种方法创建类。然后你可以使用类似下面的一个,但建议使用第一个。

public HttpResponseMessage Register([FromBody]dynamic value)
{
    //convert to attribute
    string first = value.first.ToString();
    string second = value.second.ToString();
} 

以下是好读:Getting Started with ASP.NET Web API 2 (C#)