【问题标题】:Using RouteAttribute and IIS Application gives 404 error使用 RouteAttribute 和 IIS 应用程序会出现 404 错误
【发布时间】:2016-12-05 15:26:27
【问题描述】:

我创建了一个 webAPI 项目,我想开始在 IIS 中托管它。

控制器中的方法如下所示:

    [TokenAuthentication]
    [HttpGet]
    [Authorize(Roles=Roles.PING)]
    [Route("~/Ping")]
    public DateTime Ping()
    {
        return DateTime.UtcNow;

    }

我的 WebApiConfig 如下所示:

public static class WebApiConfig
{
    public static void Register(HttpConfiguration config)
    {
        var cors = new EnableCorsAttribute("*", "*", "*");
        config.EnableCors(cors);
        config.MapHttpAttributeRoutes();
        GlobalConfiguration.Configuration.Filters.Add(new ValidateModelAttribute());
        //config.Routes.MapHttpRoute(
        //    name: "DefaultApi",
        //    routeTemplate: "{controller}/{id}",
        //    defaults: new { id = RouteParameter.Optional }
        //);
    }
}

当我通过 Visual Studio 运行项目并转到链接 http://localhost:53722/ping 时,我收到了未经授权的响应,这正是我所期望的。

当我将网站放在具有虚拟路径“/Account”的应用程序中的 IIS 上时,我收到 404 响应,它正在尝试使用静态文件处理程序。

通过在线搜索,我将 runAllManagedModulesForAllRequests 设置为 true。我还发现Configure ASP.NET Web API application as a Virtual Directory under ASP.NET MVC application 似乎“/Account/”不应该干扰路由。

我不能将 API 放在路由目录,因为我将在同一个站点下运行多个微服务。

如何使用虚拟目录获得工作路径?

谢谢, 史蒂文

【问题讨论】:

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


    【解决方案1】:

    每个站点都应该作为应用程序而不是虚拟目录运行(理想情况下,每个站点都有自己的应用程序池)。

    你通常会选择开箱即用

     [Route("ping")]
    

    这会给你一个http://blah.com/ping的网址 如果您在子文件夹/应用程序中运行此 api,那么它可能类似于 http://blah.com/subapp/ping

    这就是我的全部......

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-12-18
      • 1970-01-01
      • 2020-12-17
      • 2015-12-10
      • 2012-07-13
      相关资源
      最近更新 更多