Web Api 2 404错误

时间:2015-11-02 20:28:47

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

尝试使用以下网址

调用以下方法时出现404错误
    [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来自于字符串&#34; Tax H:AG43SS GMIB上调用HttpUtility.UrlEncode();没有fpws; d&安培; R&#34 ;.如果有另一种方法来完成传递这个字符串,我也可以这样做。

如果我称之为&#34;更简单&#34;该方法可以正常工作。任务名称如此

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

我安装了RouteDebugger nuget包,但它没有用。为了完整性,这里是我的WebApiConfig.cs文件

    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文件

    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 }
                );
            }
        }
    }

2 个答案:

答案 0 :(得分:2)

您收到的错误是:

HTTP错误404.11 - 未找到
请求过滤模块配置为拒绝包含双转义序列的请求。

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

1-在<system.webServer>下的<security>下,您应该:

<requestFiltering allowDoubleEscaping="true"></requestFiltering>

2- <system.web>下你应该:

<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" />

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

答案 1 :(得分:1)

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

一样