具有* .js的URL的WebApi属性路由

时间:2015-04-09 19:19:35

标签: c# asp.net-web-api asp.net-mvc-routing attributerouting

好吧,

我试图在.Net WebAPI中模拟基于RoR的服务。该服务的Ruby实现应该从以下URL中返回JSON文档:

http://myserver/api/assessments/{id}.js

请注意最后的.js

我在我的api控制器上做了RouteAttribute装饰,如下所示:

[Route("~/api/assessments/{id}.js")]
public async Task<HttpResponseMessage> GetAssessment(int id)
{
    . . .
}

...但我收到404错误。我怀疑这可能是因为请求以&#34; js&#34;结束,所以在经过一些研究后我发现我应该将RouteCollection.RouteExistingFiles设置为true ...这似乎没有有任何影响。我仍然得到404。

我是对的吗?是.js结束导致404的原因是什么?我怎么能绕过这个?这是一个纯粹的WebApi项目,所以它并不像我在其中使用JavaScript。

1 个答案:

答案 0 :(得分:3)

您的Web.config中是否包含以下内容?我最近刚设置了一个工作项目的路由,这条线路让我感到各种各样的地狱,因为它不存在:

<configuration>
  ...
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
    ...
    </modules>
  </system.webServer>
</configuration>

执行路由的托管模块可能无法获取.js扩展名。

附录: 该配置部分中的附加数据是使其工作所必需的:

<configuration>
  ...
  <system.webServer>
    <modules runAllManagedModulesForAllRequests="true">
      <add name="UrlRoutingModule"
         type="System.Web.Routing.UrlRoutingModule, 
               System.Web.Routing, Version=3.5.0.0, 
               Culture=neutral, 
               PublicKeyToken=31BF3856AD364E35" />
    </modules>
    <handlers>
      <add name="UrlRoutingHandler"
        preCondition="integratedMode"
        verb="*" path="UrlRouting.axd"
        type="System.Web.HttpForbiddenHandler, 
              System.Web, Version=2.0.0.0, Culture=neutral, 
              PublicKeyToken=b03f5f7f11d50a3a" />
    </handlers>
    ...
  </system.webServer>
</configuration>