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 }
);
}
}
}
您收到的错误是:
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