使用下面的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 }
);
}
}
}发布于 2015-11-02 20:45:11
您正在接收的错误是:
HTTP错误404.11 -未找到
请求过滤模块被配置为拒绝包含双重转义序列的请求。
要解决这个问题,可以在web.config文件中应用一些设置:
1-在<system.webServer> you <security>下,您应该拥有:
<requestFiltering allowDoubleEscaping="true"></requestFiltering>2-在<system.web>下,您应该拥有:
<httpRuntime targetFramework="4.5" requestPathInvalidCharacters="" />第二个设置允许您在路径中使用:。
发布于 2015-11-02 20:40:22
api调用失败的原因是URL中的字符%和+。构造或设计api调用URL以消除这些字符,就像成功的api URL一样
https://stackoverflow.com/questions/33486261
复制相似问题