c#API控制器传递参数client.GetAsync错误404

时间:2017-10-20 15:07:26

标签: c# httpclient http-get asp.net-apicontroller

嗨我有一个API Controller,其中有一个接收参数的方法。

当我从client拨打电话时,请404 error

如果使用ni参数重写de方法,它可以工作......

这是我的API controller

 public class ClientController : ApiController
    {
     
        [HttpGet]
        public List<User> GetAAA(int userCode)
        {
           return null;
        }
    }

这是我的客户......

using (HttpClient client = new HttpClient())
            {
                client.BaseAddress = new Uri(apiUrl);
                client.DefaultRequestHeaders.Accept.Clear();
                List<User> list;
                client.DefaultRequestHeaders.Accept.Add(new System.Net.Http.Headers.MediaTypeWithQualityHeaderValue("application/json"));
                string uriString = string.Format("{0}/{1}", "http://localhost:7734/api/Client/GetAAA", 1783);
                HttpResponseMessage response = await client.GetAsync(uriString);
                if (response.IsSuccessStatusCode)
                    list = response.Content.ReadAsAsync<List<User>>().Result;
                else
                    throw new Exception("Error");
            }

即使我在导航器中写http://localhost:7734/api/Client/GetAAA/1783说“找不到页面”

我的WebApiConfig就像这样

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

            // Web API routes
            config.MapHttpAttributeRoutes();

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

我缺少什么?

由于

4 个答案:

答案 0 :(得分:1)

更新控制器操作以使Route属性如下

 public class ClientController : ApiController
 {
      [Route("api/Client/GeAAA/{userCode}")]    
      [HttpGet]
      public List<User> GetAAA(int userCode)
      {
         return null;
      }
 }

答案 1 :(得分:1)

更改控制器方法:

[HttpGet]
public List<User> GetAAA(int id)
{
    return null;
}

或使用网址:

  

http://localhost:7734/api/Client/GetAAA?userCode=1783

答案 2 :(得分:0)

看起来这是基于约定的路由与属性路由的情况。

ASP.NET MVC将使用基于约定的路由,如配置文件中所述。

因此,“GET”将从url参数中删除。

看起来应该是这样的:

http://localhost:7734/api/Client/AAA/1783

我个人发现基于约定的路由不太有用,所以我使用基于属性的路由(也在配置文件中配置)。

将此添加到您的GetAAA方法:

[HttpGet]
[Route("GetAAA/{userCode}")]
public List<User> GetAAA(int userCode)
{
     ...
}

此Route属性应该允许您按照您的说明使用链接。

答案 3 :(得分:0)

这是我的错。这么傻我以前没见过。

我的想法是不使用[Route],只使用WebApiConfig

中定义的方式

定义是

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

我在电话中唯一需要做的事情

  

public List GetAAA(int userCode)

替换参数名称....

  

公开列表GetAAA(int id)

id是如何在配置中定义的......