Sitecore 8.1 中的 Web API 属性路由不起作用

Posted

技术标签:

【中文标题】Sitecore 8.1 中的 Web API 属性路由不起作用【英文标题】:Web API Attribute routing in Sitecore 8.1 not working 【发布时间】:2017-10-25 11:31:17 【问题描述】:

由于 Atrribute 路由在 sitecore 8.1 开箱即用中不起作用,我关注 https://github.com/Krusen/Sitecore.WebApi 并获得了 Krusen.Sitecore.WebApi.Custom 的 uget 包。

这是我的ConfigureWebApi 课程

public class ConfigureWebApi

    public void Process(PipelineArgs args)
    

        GlobalConfiguration.Configure(config => config.Routes.MapHttpRoute(
                name: "myApi",
                routeTemplate: "api/controller/action/id",
                defaults: new  id = RouteParameter.Optional 
            ));
        GlobalConfiguration.Configure(config => config.MapHttpAttributeRoutes());
        GlobalConfiguration.Configure(ReplaceControllerSelector);
    

    private static void ReplaceControllerSelector(HttpConfiguration config)
    
        config.Services.Replace(typeof (IHttpControllerSelector),
            new CustomHttpControllerSelector(config, new NamespaceQualifiedUniqueNameGenerator()));
    

这是我的控制器

[RoutePrefix("windows")]
public class WmsController : ApiController

    [HttpGet]
    [Route("hi")]
    public IHttpActionResult Hello()
    
        return Ok("Welcome to my Api.");
    


当我这样称呼时:

http://my.api.local/api/wms/hello

有效。 但是当我打电话时

http://my.api.local/api/windows/hi

不起作用。它说 404。

我是不是错过了什么!!

【问题讨论】:

根据你的配置,不应该叫http://my.api.local/windows/hi吗? (没有/api 【参考方案1】:

第二次调用不起作用,因为必须在基于约定的路由之前配置属性路由以避免路由冲突。

public void Process(PipelineArgs args) 
    GlobalConfiguration.Configure(config => 
        // Map Attribute Routes
        config.MapHttpAttributeRoutes();

        // Map Convention-based Routes
        config.Routes.MapHttpRoute(
            name: "myApi",
            routeTemplate: "api/controller/action/id",
            defaults: new  id = RouteParameter.Optional 
        );

        // Replace IHttpControllerSelector with our custom implementation
        ReplaceControllerSelector(config);
    );

我也相信它在链接仓库的文档中是如何显示的

其次基于ApiController中的RoutePrefix("window")Route("hi"),映射的属性路由将被映射为

http://my.api.local/windows/hi 

要让 http://my.api.local/api/windows/hi 映射到所需的操作,您需要更新路由前缀,如其他答案之一中所述。

【讨论】:

【参考方案2】:

您需要在控制器属性路由中添加“api/”

[RoutePrefix("api/windows")]
public class WmsController : ApiController

    [HttpGet]
    [Route("hi")]
    public IHttpActionResult Hello()
    
        return Ok("Welcome to my Api.");
    


【讨论】:

以上是关于Sitecore 8.1 中的 Web API 属性路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章

Sitecore 8.1 重建链接数据库出现超时异常

从 Sitecore 8.0 升级后启动板设计未加载

Chrome + Windows 8.1 上的 Web Share API 是不是损坏?

Sitecore WFFM 保存到数据库失败

Sitecore8.2 .net Solr搜索实现

使用 Item web api 创建 Item