将变量发送到Web API方法

时间:2014-03-10 13:08:43

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

我已在ValuesController类中使用以下方法设置了一个基本的MVC Web API项目 -

// GET api/values/5
public string Get(int id)
{
    return "Success!";
}

在客户端中调用此类似 -

client.BaseAddress = new Uri("http://localhost:12345/");
client.DefaultRequestHeaders.Accept.Clear();
client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json"));

 HttpResponseMessage response = await client.GetAsync("api/values/5");
 if (response.IsSuccessStatusCode)
 {
     result = await response.Content.ReadAsStringAsync();
 }

我是相对较新的MVC但是我试图修改此方法以接受在数据库调用中使用的字符串变量。例如 -

// GET api/values/number/house/street
public string Get(string no, string house, string street)
{
    // use variables
    return "Success!";
}

然后客户端就像 -

HttpResponseMessage response = await client.GetAsync("api/values/" + no + house + street);
 if (response.IsSuccessStatusCode)
 {
     result = await response.Content.ReadAsStringAsync();
 }

我实际上是在尝试将API用作Web服务,但不确定如何将其修改为以这种方式工作。

当我尝试上面的代码时,它返回Bad Request

1 个答案:

答案 0 :(得分:1)

您可能尚未设置路由到WebApi服务。 查看此资源,了解如何设置:http://www.asp.net/web-api/overview/web-api-routing-and-actions

编辑:
或者,等等!如果可能是对您的服务的呼叫是错误的。如果您查看api方法定义,注释会告诉您URL应如下所示:

GET api/values/number/house/street

虽然您将其称为:

GET api/values/NoHouseStreet

因此值之间没有斜线。我猜你如果你更改了网址,你就会调用以下内容,那么事情就应该正常了:

HttpResponseMessage response = await client.GetAsync("api/values/" + no + "/" + house + "/" + street);