首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Web 2 404错误

Web 2 404错误
EN

Stack Overflow用户
提问于 2015-11-02 20:28:47
回答 2查看 1K关注 0票数 3

使用下面的url调用下面的方法时,我得到了一个404错误

代码语言:javascript
复制
    [HttpGet]
    [Route("api/Trinity/GetDirectoryAndTask/{modelTemplateId}/{taskName}")]
    public KeyValuePair<string, string> GetDirectoriesAndTasks(int modelTemplateId, string taskName)

http://localhost:46789/api/Trinity/GetDirectoryAndTask/9/Tax+H%3a+AG43SS+GMIB%3b+no+fpws%3b+d%26r

这个url来自在字符串"Tax H: AG43SS GMIB;no fpws;d&r“上调用HttpUtility.UrlEncode()。如果有另一种方式来完成这个字符串的传递,我也是开放的。

如果我称它为“简单”任务名,则该方法工作良好,如下所示

http://localhost:46789/api/Trinity/GetDirectoryAndTask/9/Roth

我安装了RouteDebugger nuget软件包,但没有多大帮助。为了完整起见,这里是我的WebApiConfig.cs文件

代码语言:javascript
复制
    using System.Web.Http;

    namespace DbService
    {
        public static class WebApiConfig
        {
            public static void Register(HttpConfiguration config)
            {
                // Web API routes
                MapRoutes(config);
            }

            private static void MapRoutes(HttpConfiguration config)
            {
                config.MapHttpAttributeRoutes();

                //config.Routes.MapHttpRoute(
                //    name: "DefaultApi",
                //    routeTemplate: "api/{controller}/{id}",
                //    defaults: new { id = RouteParameter.Optional }
                //);
            }
        }
    }

和RouteConfig.cs文件

代码语言:javascript
复制
    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Web;
    using System.Web.Mvc;
    using System.Web.Routing;

    namespace DbService
    {
        public class RouteConfig
        {
            public static void RegisterRoutes(RouteCollection routes)
            {
                routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

                routes.MapRoute(
                    name: "Default",
                    url: "{controller}/{action}/{id}",
                    defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
                );
            }
        }
    }
EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2015-11-02 20:45:11

您正在接收的错误是:

HTTP错误404.11 -未找到

请求过滤模块被配置为拒绝包含双重转义序列的请求。

要解决这个问题,可以在web.config文件中应用一些设置:

1-在<system.webServer> you <security>下,您应该拥有:

代码语言:javascript
复制
<requestFiltering allowDoubleEscaping="true"></requestFiltering>

2-在<system.web>下,您应该拥有:

代码语言:javascript
复制
<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" />

第二个设置允许您在路径中使用:

票数 3
EN

Stack Overflow用户

发布于 2015-11-02 20:40:22

api调用失败的原因是URL中的字符%和+。构造或设计api调用URL以消除这些字符,就像成功的api URL一样

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

https://stackoverflow.com/questions/33486261

复制
相关文章

相似问题

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