使用字符串参数调用web api

我有一个web api,我有2个方法,一个没有参数,两个有不同类型的参数(字符串和整数)。 调用字符串方法时它不起作用…我在这里缺少什么?

public class MyControllerController : ApiController { public IHttpActionResult GetInt(int id) { return Ok(1); } public IHttpActionResult GetString(string test) { return Ok("it worked"); } } 

WebApiConfig.cs:

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

我的电话:

/ api / MyController / MyString //不起作用

/ api / MyController / 1 //工作

我收到以下错误:

参数字典包含’TestAngular.Controllers.MyControllerController’中方法’System.Web.Http.IHttpActionResult GetInt(Int32)’的非可空类型’System.Int32’的参数’id’的空条目。 可选参数必须是引用类型,可空类型,或者声明为可选参数。

我的请求中缺少什么?

你必须改变你的uri

 /api/MyController /api/MyController/string /api/MyController/1 

您不必指定方法。

您可以在asp.net上查看本教程以获得进一步的说明。

此uri应该工作:

 api/MyController/GetAll api/MyController/GetString?param=string api/MyController/GetInt?param=1 

我认为这更清楚,应该始终有效。 您使用路由行为。

见这里: http : //www.asp.net/web-api/overview/web-api-routing-and-actions/routing-and-action-selection

这是我的解决方案:不改变webapiconfig.cs文件中的默认路由

只添加一个到你的字符串函数的路由:

 [Route("Api/MyController/GetString/{test}")] public IHttpActionResult GetString(string test) 

HTTP://本地主机:49609 / API / myController的/的GetString / stringtest

你发布这个已经有一段时间了,但我想我有答案。 首先,有两个问题。 首先,正如Pinback指出的那样,您不能对两个不同的端点使用相同的路由。

但是,如果你只是消除了int方法,你仍然会遇到问题。 请记住:默认路由如下所示:api / {controller} / {id}为了绑定参数,必须将其称为“id”,而不是“test”。

将签名更改为:

 public IHttpActionResult GetString(string id) 

它会起作用。 (您也可以在webapiconfig.cs文件中将{id}更改为{test}