首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >为什么这条网络Api路线不走呢?

为什么这条网络Api路线不走呢?
EN

Stack Overflow用户
提问于 2013-09-18 21:49:35
回答 3查看 903关注 0票数 4

因此,在我的WebApi配置中,我添加了一个新的路由

代码语言:javascript
复制
    public static void Register(HttpConfiguration config)
    {
        config.Routes.MapHttpRoute(
            name: "DefaultApi",
            routeTemplate: "api/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
        config.Routes.MapHttpRoute(
            name: "ControlPanelApi",
            routeTemplate: "cp/{controller}/{id}",
            defaults: new { id = RouteParameter.Optional }
        );
    }

我有控制器

代码语言:javascript
复制
public class SwitchUserController : BaseApiController
{
    public HttpResponseMessage Put(int id) {
        return Request.CreateResponse(HttpStatusCode.OK);
    }   
}

然而,在铬中:

代码语言:javascript
复制
Request URL:http://localhost:1352/cp/SwitchUser/123
Request Method:PUT
Status Code:404 Not Found

我一直使用默认的web路由。我遗漏了什么?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2013-10-05 23:01:42

我终于弄明白了到底是怎么回事。

最初连接WebApi的人从未真正调用过WebApiConfig.Register(GlobalConfiguration.Configuration);,因此,当然,我添加的任何配置都不会影响WebApi。把它加到解决问题上。

票数 1
EN

Stack Overflow用户

发布于 2013-09-27 08:02:38

我在一个小型的测试web项目中尝试了这些路线,一切都很好。

但这是我的建议。尝试将解决方案分成两个不同的项目。第一个config.file将有

代码语言:javascript
复制
public static void Register(HttpConfiguration config)
{
    config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "api/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

第二次

代码语言:javascript
复制
public static void Register(HttpConfiguration config)
{
   config.Routes.MapHttpRoute(
        name: "DefaultApi",
        routeTemplate: "cp/{controller}/{id}",
        defaults: new { id = RouteParameter.Optional }
    );
}

正确注册这些网站在你的网站服务器的选择,你就完成了。这一办法应能奏效。此外,使用这种技术,您可以避免两个urls可以访问多个控制器的情况:api/someControllercp/someController

票数 1
EN

Stack Overflow用户

发布于 2013-09-30 11:22:37

很可能您没有为您的应用程序正确配置httpHandlers。尝试将其添加到web.config

代码语言:javascript
复制
<system.webServer>
  <validation validateIntegratedModeConfiguration="false" />

  <handlers>
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" />
    <remove name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" />
    <remove name="ExtensionlessUrlHandler-Integrated-4.0" />

    <add name="ExtensionlessUrlHandler-ISAPI-4.0_32bit" path="*." verb="GET,HEAD,POST,PUT,DELETE" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness32" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-ISAPI-4.0_64bit" path="*." verb="GET,HEAD,POST,PUT,DELETE" modules="IsapiModule" scriptProcessor="%windir%\Microsoft.NET\Framework64\v4.0.30319\aspnet_isapi.dll" preCondition="classicMode,runtimeVersionv4.0,bitness64" responseBufferLimit="0" />
    <add name="ExtensionlessUrlHandler-Integrated-4.0" path="*." verb="GET,HEAD,POST,PUT,DELETE" type="System.Web.Handlers.TransferRequestHandler" preCondition="integratedMode,runtimeVersionv4.0" />
  </handlers>
</system.webServer>

注意verb属性,它应该包含PUT谓词。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/18882946

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档