获取不到匹配请求URI的HTTP资源

4

当我试图从另一个网站访问我的WebAPI代码时,出现以下错误。

这是返回的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 }
            );
        }

你的 RouteConfig 中难道不应该有一个针对 TestControllerMapRoute 吗?你上面展示的只是针对 HomeController 的。 - Shiva
展示你的Web API路由配置。通常在WebApiConfig.cs文件中。 - Nkosi
我已经添加了webApiConfig.cs的值(它只是默认值)。我还添加了更多信息,因为在开发环境中这很好用,但只有在我们的生产环境中才不能正常工作。 - Lareau
你尝试通过 fiddler 吗?在代码中明确声明所接受的 HTTP 方法是个好习惯,[HttpGet]。 - warrior
1个回答

0

好的,我已经找出了这个问题。
今天我混淆了一些错误消息。

上述错误已经修复,因为调用web.config参数的编码问题。 我在值中使用了&amp;而不是& >_<


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接