我有一个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 //工作
我收到以下错误:
参数字典包含非可空类型'System.Int32'的参数'id'的空条目,用于'TestAngular.Controllers.MyControllerController'中的方法'System.Web.Http.IHttpActionResult GetInt(Int32)'。可选参数必须是引用类型,可空类型,或者声明为可选参数。
我的请求中缺少什么?
答案 0 :(得分:7)
你必须改变你的uri's
/api/MyController
/api/MyController/string
/api/MyController/1
您不必指定方法。
您可以在asp.net上查看此tutorial以进一步说明。
答案 1 :(得分:6)
此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
答案 2 :(得分:5)
这是我的解决方案: 不改变webapiconfig.cs文件中的默认路由
只添加一个到字符串函数的路径:
[Route("Api/MyController/GetString/{test}")]
public IHttpActionResult GetString(string test)
http://localhost:49609/api/MyController/GetString/stringtest
答案 3 :(得分:3)
你发布这个已经有一段时间,但我想我有答案。 首先,有两个问题。首先,正如Pinback指出的那样,你不能对两个不同的端点使用相同的路由。
但是,如果您只是消除了int
方法,那么您仍然会遇到问题。
请记住:默认路由如下所示:api / {controller} / {id}
为了绑定参数,它必须被称为“id”,而不是“test”。
将签名更改为:
public IHttpActionResult GetString(string id)
它会起作用。
(您也可以在webapiconfig.cs文件中将{id}
更改为{test}
。
答案 4 :(得分:0)
您还可以在主体中使用字符串参数
string body;
using (var sr = new StreamReader(Request.Body))
body = sr.ReadToEnd();