使用字符串参数调用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}
。