我有以下2个路由设置,并且在发送有效请求时它们工作正常。允许使用ASP.NET MVC路由的字符串ID
config.Routes.MapHttpRoute("DefaultApiWithId", "{controller}/{id}", new { id = RouteParameter.Optional }, new { id = @"\d+" });
config.Routes.MapHttpRoute("DefaultApiWithAction", "{controller}/{action}");
我想测试一些错误的请求,以确保反应是正确的。我正在尝试在我的控制器中调用以下Action。
public HttpResponseMessage Get(string id)
{
//output the id again
}
如果我叫localhost:80/users/123
,我得到响应是有效的,它会输出123
。例如,当我尝试使用无效的ID
时,包含字母的字母会失败,并显示以下错误。
{“消息”:“没有HTTP资源发现该请求URI ‘http://localhost:80/users/d1g’相匹配。”,“MessageDetail”:“无动作发现 上的名称相匹配的控制器‘用户’' d1g'。“}
我可以看到最新的错误。该请求应该与第一条路线匹配,但与第二条路线匹配。我有两种方法称为Get
。一个接受ID
,另一个不需要ID
。不需要ID
的那个返回所有记录的列表。我遇到了很多麻烦,上面的路线是我如何解决这个问题。
它不应该匹配第一条路线。该路由有一个约束条件,只允许为id参数使用数字“new {id = @”\ d +“}'。这是为了它不会与第二条路线图冲突 – Nkosi
我认为你的第一个GET,你在这里指定了一个掩码:'new {id = @“\ d +”}',尝试删除它。但是,我认为你应该只有一个方法,只需一个简单的决定:如果通过'ID',则返回一个Object,否则返回一个列表。但我会采取另一种方式。 –
如果我删除约束,我得到一个错误“发现多个匹配请求的操作:\ r \ nSystem.Net.Http.HttpResponseMessage Get()”。这是有道理的,因为我有2个get方法。一个采取一个id和另一个不采用以返回记录列表 –