Web Api 2 404 error

本文关键字:error Api Web | 更新日期: 2023-09-27 18:20:12

当我试图用以下url 调用以下方法时,出现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来自于对字符串"Tax H:AG43SS GMIB;no fpws;d&r"调用HttpUtility.UrlEncode()。如果有其他方法可以完成传递这个字符串,我也对此持开放态度。

如果我用一个"更简单"的任务名称(如)来调用该方法,则该方法效果良好

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

Web Api 2 404 error

您收到的错误是:

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

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

1-在<system.webServer>下在<security>下你应该有:

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

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

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

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

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

一样