调用WebApi时出错

时间:2018-06-26 08:51:02

标签: c# asp.net-web-api asp.net-web-api-routing

我正在尝试创建一个API,并尝试通过chrome访问它,希望它返回商品列表

Map<String, Integer> maxs = feedbacks.entrySet().stream()
               .collect(Collectors.toMap(e->e.getKey(),
                                         e-> e.getValue().stream().max(Integer::compare).get()));

System.out.println(maxs);     //{Nirmala=75, Subaksha=80}

我还没有添加路由,因此想使用默认路由运行,但是当我运行它时,就会得到

  

找不到与请求匹配的HTTP资源   URI'http://localhost:65098/api/GetTheProduct()'。    找不到与名为controller的控制器匹配的类型   'GetTheProduct()'。

建议我要使它正常工作需要具备什么条件。

1 个答案:

答案 0 :(得分:1)

如果使用默认路由,则配置可能如下所示

public static class WebApiConfig {
    public static void Register(HttpConfiguration config) {

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

这意味着路由正在使用具有以下路由模板"api/{controller}/{id}"

的基于约定的路由

您当前状态的控制器未遵循约定。这导致请求在路由表中不匹配,从而导致出现“未找到”问题。

重构控制器以遵守约定

public class ProductsController : ApiController {
    List<Product> productList = new List<Product>();

    public ProductsController() {
        this.productList.Add(new Product { Id = 111, Name = "sandeep 1" });
        this.productList.Add(new Product { Id = 112, Name = "sandeep 2" });
        this.productList.Add(new Product { Id = 113, Name = "sandeep 3" });
    }

    //Matched GET api/products
    [HttpGet]
    public IHttpActionResult Get() {
        return Ok(productList);
    }

    //Matched GET api/products/111
    [HttpGet]
    public IHttpActionResult Get(int id) {
        var product = productList.FirstOrDefault(p => p.Id == id));
        if(product == null)
            return NotFound();
        return Ok(product); 
    }
}

最后基于所配置的路由模板,然后控制器期望一个看起来像这样的请求

http://localhost:65098/api/products/111.

要获取与所提供的id相匹配的单个产品。

引用Routing in ASP.NET Web API