我对WEB很陌生,并试图遵循在网站上设置的路由方法
在我的控制器里,我有所有标准的基于动词的动作。删除。
我还有其他一些基于动词的动作。我们为每个控制器注册路由,下面是我的路由设置。见下文。我的Actions方法具有如下属性。但是,当我输入(例如http://server:49279/api/Licenses
)时,我发现MultipleActions匹配请求动作搜索,SearchByArtistId时出错
不确定如何在控制器硬编码时处理此问题。
任何帮助都是有价值的,因为我无法在网上找到解决方案。
谢谢
[System.Web.Http.AcceptVerbs(new string[] { "Get" })]
[System.Web.Http.ActionName("PublishersByLicense")]
public HttpResponseMessage PublishersByLicense(Guid Id)
{
string vControllerName="Licenses";
config.Routes.MapHttpRoute
(
name: "PublishersByLicense" + vControllerName,
routeTemplate: "api/" + vControllerName + "/" + "PublishersByLicense" + "/{aLicenseId}",
defaults: new
{
controller = vControllerName,
action = "PublishersByLicense"
},
constraints: new
{
httpMethod = new HttpMethodConstraint(HttpMethod.Get)
}
);
config.Routes.MapHttpRoute
(
name: "Search" + vControllerName,
routeTemplate: "api/" + vControllerName + "/" + "Search" + "/{aTrackIds}",
defaults: new
{
controller = vControllerName,
action = "Search"
},
constraints: new
{
httpMethod = new HttpMethodConstraint(HttpMethod.Get)
}
);
config.Routes.MapHttpRoute
(
name: "GetAll" + vControllerName,
routeTemplate: "api/" + vControllerName,
defaults: new
{
controller = vControllerName
},
constraints: new
{
httpMethod = new HttpMethodConstraint(HttpMethod.Get)
}
);
config.Routes.MapHttpRoute
(
name: "GetSingle" + vControllerName,
routeTemplate: "api/" + vControllerName + "/{aLicenseId}",
defaults: new
{
controller = vControllerName
},
constraints: new
{
httpMethod = new HttpMethodConstraint(HttpMethod.Get)
}
);
这是我的控制器代码
[System.Web.Http.AcceptVerbs(new string[] { "Get" })]
[System.Web.Http.ActionName("Search")]
public HttpResponseMessage Search([FromUri]Guid[] aTrackIds)
{
public HttpResponseMessage Get()
{
发布于 2013-09-27 07:23:39
您定义的第三条路由将匹配对http://server:49279/api/Licenses
的请求:
config.Routes.MapHttpRoute
(
name: "GetAll" + vControllerName,
routeTemplate: "api/" + vControllerName,
defaults: new
{
controller = vControllerName
},
constraints: new
{
httpMethod = new HttpMethodConstraint(HttpMethod.Get)
}
);
由于您没有在其中显式地指定action
路由值,所以Web试图找到最合适的操作本身。
我不知道您的控制器代码,但是我假设Search
和SearchByArtistId
都有相同数量的参数,这些参数可以从请求数据中填充,从而使它们具有相同的好(或坏)操作选择。这就是为什么Web不能明确地选择一个正确的操作。
https://stackoverflow.com/questions/19043443
复制相似问题