3

他のサイトからwebapiコードを打つときに次のエラーが発生します。Gettting要求URIと一致するHTTPリソースが見つかりません

返されるjsonメッセージは次のとおりです。

"Message":"No HTTP resource was found that matches the request URI 
'http://localhost:47845/api/Test?samAccountName=aasdf&success=True&permissionName=bla'.","MessageDetail": 
"No action was found on the controller 'Test' that matches the request." 

私は直接サイトにヒットすると、 http://MyServer/ApiToHit/api/Values?samAccountName=someAccount&success=True&permissionName=MyPermission

は、私は素敵な成功の文字列を取得します。

私は次のコードでヒットすると、上記のエラーメッセージが表示されます。

using (var client = new HttpClient(new HttpClientHandler { UseDefaultCredentials = true })) 
      { 
       client.DefaultRequestHeaders.Accept.Clear(); 
       client.DefaultRequestHeaders.Accept.Add(new MediaTypeWithQualityHeaderValue("application/json")); 


       var values = HttpUtility.UrlDecode(string.Format(
        CultureInfo.InvariantCulture, ConfigurationManager.AppSettings["PathToParameters"].ToString(), 
        "someAccount".ToUpper(CultureInfo.InvariantCulture), 
        true.ToString(), 
        "MyPermission".ToUpper(CultureInfo.InvariantCulture))); 

       lblResult.Text = string.Empty; 

       var newUrl = new Uri(ConfigurationManager.AppSettings["Url"].ToString() + values); 

       // HTTP GET 
       var response = await client.GetAsync(newUrl, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false); 
       //var response = await client.GetAsync(values, HttpCompletionOption.ResponseHeadersRead).ConfigureAwait(false); 
       this.lblResult.Text = await response.Content.ReadAsStringAsync(); 
      } 

は、ここに私のAPIコントローラ

public class TestController : ApiController 
{ 
    // GET: api/Test 
    public string Get(string samAccountName, bool success, string permissionName) 
    { 
     var returnValue = "Success"; 

     return returnValue; 
    } 
} 

は、ここに私のルート

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


     } 
    } 

public static void Register(HttpConfiguration config) 
     { 
      // Web API configuration and services 

      // Web API routes 
      config.MapHttpAttributeRoutes(); 

      config.Routes.MapHttpRoute(
       name: "DefaultApi", 
       routeTemplate: "api/{controller}/{id}", 
       defaults: new { id = RouteParameter.Optional } 
      ); 
     } 
+0

'RouteConfig'に' TestController'の 'MapRoute'がありませんか?あなたが上に示したのは 'HomeController'だけです。 – Shiva

+0

Web APIのルート設定を表示します。それは通常 'WebApiConfig.cs'にあります。 – Nkosi

+0

私はwebApiConfig.csの値を追加しました(これはちょうどデフォルトのものです)。私はまた、devでこれはうまく動作するので、もう少しの情報を追加しましたが、私たちの生産環境では正しく動作しません。 – Lareau

答えて

0

大丈夫だ、これは私はこれで問題を考え出しました。
エラーメッセージのいくつかが混乱してしまいました。

上記のエラーは、web.configの呼び出しのパラメータのエンコーディングに関する問題が修正されたために修正されました。値に&の代わりに&amp;がありました> _ <

関連する問題