C# 极简Web API属性路由设置-共享主机帮助

C# 极简Web API属性路由设置-共享主机帮助,c#,asp.net-web-api,attributerouting,C#,Asp.net Web Api,Attributerouting,我有一个超级简单的Web API。它公开不安全,只提供免费数据。我想将它从我的个人服务器移动到共享主机(例如:GoDaddy),但我遇到了问题 当试图访问共享主机解决方案上的属性路由Web API服务时,有许多与404状态相关的类似问题。但他们都没有为我工作过。这是我的超级简单当前设置: 创建一个名为YourApplicationName的新.NETFramework 4.5空C#Web应用程序 确保未选中所有复选框和包 添加新的“Global.asax”对象 将C#的全部内容替换为以下内容

我有一个超级简单的Web API。它公开不安全,只提供免费数据。我想将它从我的个人服务器移动到共享主机(例如:GoDaddy),但我遇到了问题

当试图访问共享主机解决方案上的属性路由Web API服务时,有许多与404状态相关的类似问题。但他们都没有为我工作过。这是我的超级简单当前设置:


  • 创建一个名为YourApplicationName的新.NETFramework 4.5空C#Web应用程序
  • 确保未选中所有复选框和包
  • 添加新的“Global.asax”对象
  • 将C#的全部内容替换为以下内容:

    using System.Web.Http;
    namespace YourApplicationName
    {
        public class Global : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                System.Web.Mvc.AreaRegistration.RegisterAllAreas();
                GlobalConfiguration.Configure((HttpConfiguration config) => { config.MapHttpAttributeRoutes(); });
            }
        }
    
        public class TestController : System.Web.Http.ApiController
        {
            [System.Web.Http.Route("api/Test")]
            public string Get()
            {
                return "Test Info";
            }
        }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.web>
        <customErrors mode="Off" />
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5" />
      </system.web>
      <system.webServer>
        <handlers>
          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <remove name="OPTIONSVerbHandler" />
          <remove name="TRACEVerbHandler" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
      </system.webServer>
    </configuration>
    
  • 将Web.config文件替换为以下文件:

    using System.Web.Http;
    namespace YourApplicationName
    {
        public class Global : System.Web.HttpApplication
        {
            protected void Application_Start()
            {
                System.Web.Mvc.AreaRegistration.RegisterAllAreas();
                GlobalConfiguration.Configure((HttpConfiguration config) => { config.MapHttpAttributeRoutes(); });
            }
        }
    
        public class TestController : System.Web.Http.ApiController
        {
            [System.Web.Http.Route("api/Test")]
            public string Get()
            {
                return "Test Info";
            }
        }
    }
    
    <?xml version="1.0" encoding="utf-8"?>
    <configuration>
      <system.web>
        <customErrors mode="Off" />
        <compilation debug="true" targetFramework="4.5" />
        <httpRuntime targetFramework="4.5" />
      </system.web>
      <system.webServer>
        <handlers>
          <remove name="ExtensionlessUrlHandler-Integrated-4.0" />
          <remove name="OPTIONSVerbHandler" />
          <remove name="TRACEVerbHandler" />
          <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="*" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
        </handlers>
      </system.webServer>
    </configuration>
    
    可能的问题5:有人说,要解决这个问题,您需要添加
    runAllManagedModulesForAllRequests=“true”
    ,并使用httpHandlers删除并手动添加扩展处理程序和urlRoutingModule


    我已经完成了所有这些变通方法的组合,但我无法想象真正的问题是什么。请让我知道我可能遗漏了什么,我花了好几天的时间在这上面。

    老式路线图有用吗?是的。如果我添加带有名称和routeTemplate的
    config.Routes.MapHttpRoute
    ,它会工作。但是,这将不再使用属性路由,并且无法达到此目的。但这是一个很好的补充信息,因为它确实适用于传统的路由配置。可以肯定的是:问题是如何让属性路由与共享主机,特别是GoDaddy一起工作。