尝试使用以下网址
调用以下方法时出现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 }
);
}
}
}
答案 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
一样