没有HTTP资源发现,在网页API相匹配的请求URI [英] No HTTP resource was found that matches the request URI in Web API

查看:379
本文介绍了没有HTTP资源发现,在网页API相匹配的请求URI的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我已经配置我的WebApiConfig是这样的:

 公共静态无效的注册(HttpConfiguration配置)
{
    config.Routes.MapHttpRoute(
        名称:DefaultApi
        routeTemplate:API / {控制器} / {行动} / {ID}
        默认:新{ID = RouteParameter.Optional}
    );
}

我有一个接受一个参数的方法。在访问URI是的http://本地主机:8598 / API /的WebAPI / GetLocationCategory / 87

这给了我一个错误:无HTTP资源发现,请求URI相匹配的http://本地主机:8598 / API /的WebAPI / GetLocationCategory / 87

控制器:

 公开的IEnumerable< LocationCategory_CLS> GetLocationCategory(INT CATID)
{
    VAR LocCats =(LCT从在entities.tdp_LocationCategories加入LC在entities.tdp_LocationMaster上lct.FK_LocationID等于lc.LocationID哪里lct.IsApproved == 0安培;&安培; lct.FK_CategoryID == CATID选择新的{lc.LocationID,LC。 LOCATIONNAME})了ToList()。
    清单< LocationCategory_CLS> LOC =新的List< LocationCategory_CLS>();    的foreach(在LocCats VAR元素)
    {
        loc.Add(新LocationCategory_CLS
        {
            LocationID = element.LocationID,
            LOCATIONNAME = element.LocationName
        });
    }
    回禄;
}


解决方案

试着改变你的控制器方法

 公开的IEnumerable< LocationCategory_CLS> GetLocationCategory(INT ID)LT;  - 更改
{
    VAR LocCats =(LCT从在entities.tdp_LocationCategories加入LC在entities.tdp_LocationMaster上lct.FK_LocationID等于lc.LocationID哪里lct.IsApproved == 0安培;&安培; lct.FK_CategoryID == ID选择新的{lc.LocationID,LC。 LOCATIONNAME})了ToList()。
    清单< LocationCategory_CLS> LOC =新的List< LocationCategory_CLS>();    的foreach(在LocCats VAR元素)
    {
        loc.Add(新LocationCategory_CLS
        {
            LocationID = element.LocationID,
            LOCATIONNAME = element.LocationName
        });
    }
    回禄;
}

变化是唯一的,改变从 CATID 输入参数 ID ....它为我很多次..

修改


它的很长一段时间,当我回头看的我觉得我知道原因了。 的话像贾里德是正确的,这一切都与我们指定路由做。如果我有一个路径(默认值)为:

  routes.MapRoute(
        默认,//路线名称
        {控制器} / {行动} / {ID},// URL带参数
        新{控制器=家,行动=索引,ID =} //参数默认
    );

和我的网址 / myController的/ GetLocationCategory / 123 ,这将等同于 / myController的/ GetLocationCategory?ID = 123

同样,如果我想改变我的参数名称编号说CATID,那么我需要更改查询字符串参数(我打电话给我的控制器操作会改变的方式)。现在是:

/ myController的/ GetLocationCategory?CATID = 123

I have configured my WebApiConfig like this:

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

I have one method which accepts one parameter. The accessing URI is http://localhost:8598/api/WebApi/GetLocationCategory/87.

This gives me an error: No HTTP resource was found that matches the request URI 'http://localhost:8598/api/WebApi/GetLocationCategory/87'

Controller:

public IEnumerable<LocationCategory_CLS> GetLocationCategory(int CatID)
{
    var LocCats = (from lct in entities.tdp_LocationCategories join lc in entities.tdp_LocationMaster on lct.FK_LocationID equals lc.LocationID where lct.IsApproved == 0 && lct.FK_CategoryID == CatID select new { lc.LocationID, lc.LocationName }).ToList();
    List<LocationCategory_CLS> loc = new List<LocationCategory_CLS>();

    foreach (var element in LocCats)
    {
        loc.Add(new LocationCategory_CLS
        {
            LocationID = element.LocationID,
            LocationName = element.LocationName
        });
    }
    return loc;
}

解决方案

Try changing your Controller method as

public IEnumerable<LocationCategory_CLS> GetLocationCategory(int id) <-- Change
{
    var LocCats = (from lct in entities.tdp_LocationCategories join lc in entities.tdp_LocationMaster on lct.FK_LocationID equals lc.LocationID where lct.IsApproved == 0 && lct.FK_CategoryID == id select new { lc.LocationID, lc.LocationName }).ToList();
    List<LocationCategory_CLS> loc = new List<LocationCategory_CLS>();

    foreach (var element in LocCats)
    {
        loc.Add(new LocationCategory_CLS
        {
            LocationID = element.LocationID,
            LocationName = element.LocationName
        });
    }
    return loc;
}

The change is only, changing input parameter from CatId to id.... It works for me many times..

Edit :


Its a long time when I look back I think I know the reason now. Words Like Jared is correct, it's all to do with Routing which we specify. If I have a route(default) as :

routes.MapRoute(
        "Default",                                              // Route name
        "{controller}/{action}/{id}",                           // URL with parameters
        new { controller = "Home", action = "Index", id = "" }  // Parameter defaults
    );

And my URL is /MyController/GetLocationCategory/123, it will be equivalent to /MyController/GetLocationCategory?id=123.

Similarly, if I want to change my parameter name for Id to say CatId, then I need to change the query string parameter(the way I am calling my Controller Action would change). Which would now be :

/MyController/GetLocationCategory?CatId=123

这篇关于没有HTTP资源发现,在网页API相匹配的请求URI的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
相关文章
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆