C# Sitecore 8.1中的Web API属性路由不工作

C# Sitecore 8.1中的Web API属性路由不工作,c#,sitecore,asp.net-web-api-routing,sitecore8.1,C#,Sitecore,Asp.net Web Api Routing,Sitecore8.1,由于在sitecore 8.1开箱即用的版本中,属性路由不起作用,因此我将遵循 并获得了Krusen.Sitecore.WebApi.Custom的uget包 这是我的配置WebAPI类 public class ConfigureWebApi { public void Process(PipelineArgs args) { GlobalConfiguration.Configure(config => config.Routes.MapHttpRou

由于在sitecore 8.1开箱即用的版本中,属性路由不起作用,因此我将遵循
并获得了
Krusen.Sitecore.WebApi.Custom
的uget包

这是我的
配置WebAPI

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

我错过了什么吗

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

[RoutePrefix("api/windows")]
public class WmsController : ApiController
{
    [HttpGet]
    [Route("hi")]
    public IHttpActionResult Hello()
    {
        return Ok("Welcome to my Api.");
    }

}

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

公共作废流程(PipelineArgs args){
GlobalConfiguration.Configure(配置=>{
//映射属性路由
config.maphttpAttribute路由();
//基于地图惯例的路线
config.Routes.MapHttpRoute(
名称:“myApi”,
routeTemplate:“api/{controller}/{action}/{id}”,
默认值:新建{id=RouteParameter.Optional}
);
//用我们的自定义实现替换IHttpControllerSelector
替换控制器选择器(配置);
});
}
我也相信这是如何显示在文件中的联系回购

其次,基于
ApiController
中的
RoutePrefix(“窗口”)
Route(“hi”)
,映射的属性Route将映射为

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

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

根据您的配置,您是否应该调用
http://my.api.local/windows/hi
?(无
/api