2015-11-02 99 views
2

我越來越想調用下面的方法有以下網址網頁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

此網址時404錯誤來自於呼叫HttpUtility.UrlEncode()字符串「Tax H:AG43SS GMIB; no fpws; d & r」。如果還有其他方法可以完成傳遞這個字符串,我也會接受。如果我把它稱爲第i一個「簡單」的任務名稱,像這樣

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

回答

2

您收到的錯誤是:

HTTP錯誤404.11 - 找不到
請求篩選模塊配置爲拒絕包含雙轉義序列的請求。

要解決,你可以在你的web.config文件中應用某些設置的問題:

1在<security><system.webServer>你應該有:

<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/34」返回「AG33%2f34」,現在我收到此異常「沒有MediaTypeFormatter可用於讀取從媒體類型爲'text/html'的內容鍵入'KeyValuePair'2'。「 – reggaeguitar

1

您的API調用失敗的原因是因爲字符%和+,在URL中。結構或設計自己的API調用URL來消除這些字符在你成功的API網址的情況下