首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >具有多个Get操作的WEB路由

具有多个Get操作的WEB路由
EN

Stack Overflow用户
提问于 2013-09-27 05:42:44
回答 1查看 974关注 0票数 0

我对WEB很陌生,并试图遵循在网站上设置的路由方法

在我的控制器里,我有所有标准的基于动词的动作。删除。

我还有其他一些基于动词的动作。我们为每个控制器注册路由,下面是我的路由设置。见下文。我的Actions方法具有如下属性。但是,当我输入(例如http://server:49279/api/Licenses )时,我发现MultipleActions匹配请求动作搜索,SearchByArtistId时出错

不确定如何在控制器硬编码时处理此问题。

任何帮助都是有价值的,因为我无法在网上找到解决方案。

谢谢

代码语言:javascript
运行
复制
[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)
               }
           );

这是我的控制器代码

代码语言:javascript
运行
复制
[System.Web.Http.AcceptVerbs(new string[] { "Get" })]
[System.Web.Http.ActionName("Search")]
public HttpResponseMessage Search([FromUri]Guid[] aTrackIds)
{
public HttpResponseMessage Get()
{
EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2013-09-27 07:23:39

您定义的第三条路由将匹配对http://server:49279/api/Licenses的请求:

代码语言:javascript
运行
复制
config.Routes.MapHttpRoute
(
    name: "GetAll" + vControllerName,
    routeTemplate: "api/" + vControllerName,
    defaults: new
    {
        controller = vControllerName
    },
    constraints: new
    {
        httpMethod = new HttpMethodConstraint(HttpMethod.Get)
    }
);

由于您没有在其中显式地指定action路由值,所以Web试图找到最合适的操作本身。

我不知道您的控制器代码,但是我假设SearchSearchByArtistId都有相同数量的参数,这些参数可以从请求数据中填充,从而使它们具有相同的好(或坏)操作选择。这就是为什么Web不能明确地选择一个正确的操作。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/19043443

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档