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 属性路由不起作用的主要内容,如果未能解决你的问题,请参考以下文章