2015-11-02 2 views
2

Я получаю сообщение об ошибке 404 при попытке вызвать следующий метод со следующим URLWeb Api 2 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 приходит от вызова HttpUtility.UrlEncode() на строка «Налог H: AG43SS GMIB, нет fpws; d & r". Если есть еще один способ выполнить передачу этой строки, я также открыт для этого.

метод отлично работает, если я называю это Ith с «простым» имя задачи, как так

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

Я установил NuGet пакет RouteDebugger, но это было не очень полезно. Для полноты вот мой 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

Ошибка Вы получаете это:

Ошибка HTTP 404,11 - Not Found
Запрос модуль фильтрации настроен на отказ от запроса, который содержит двойную escape-последовательность.

Для решения этой проблемы можно применить некоторые параметры в файле web.config:

1- Под <system.webServer> под <security> вы должны иметь:

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

2- Под <system.web> вы должны иметь:

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

Вторая настройка позволяет вам иметь : на вашем пути.

+0

Он работает для имени этой задачи, но теперь он не работает для имени задачи «AG33/34», должен ли я задать новый вопрос или отредактировать его? – reggaeguitar

+0

Он возвращает вам другую ошибку. Если вы используете подходящую кодировку url, вы не получите эту ошибку. Вы должны использовать% 2F вместо /. Как% 3a и% 3b и ... –

+0

Я использую HttpUtility.UrlEncode, он возвращает «AG33% 2f34» для «AG33/34», теперь я получаю это исключение «Нет MediaTypeFormatter доступен для чтения объекта введите «KeyValuePair'2» из контента с типом мультимедиа «text/html». » – reggaeguitar

1

Причина ваш апи вызов не удается из-за символов% и +, в URL. Структура и дизайн вашего URL API вызова, чтобы устранить эти символы, как и в случае Вашего успешного апи URL

Смежные вопросы