【问题标题】:Web API call not reaching?Web API 调用未到达?
【发布时间】:2015-09-03 22:48:49
【问题描述】:

我在我的 api 中使用路由前缀

[RoutePrefix("api/currencies")]
public class DefCurrencyController : ApiController
  {
   [HttpGet, Route("")]
   public List<DefCurrency> GetAllCurrencies()
    {
        return DefCurrency.AllDefCurrency;
    }
}

我的 webapi 配置文件

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

        config.MapHttpAttributeRoutes();

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

我正在尝试使用

访问或访问GetAllCurrencies()
http://localhost:1865/api/currencies

返回错误

HTTP 错误 404.0 - Not Found 您正在寻找的资源已被 已删除、更改名称或暂时不可用。

我应该怎么做来测试我的控制器 api ?

【问题讨论】:

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


    【解决方案1】:

    【讨论】:

    • 使用路由属性时不能使用函数名调用
    【解决方案2】:

    去掉控制器上的RoutePrefix属性,只在方法上声明你想要的路由:

    public class DefCurrencyController : ApiController
    {
        [HttpGet, Route("api/currencies")]
        public List<DefCurrency> GetAllCurrencies()
        {
            return DefCurrency.AllDefCurrency;
        }
    }
    

    路由前缀用于声明部分路由以应用于控制器中的所有方法(例如,它们在一个区域中)。

    另外,这里不需要HttpPost,这应该只是GET。

    您还应该在任何基于约定的路由之前检查您是否在 WebApiConfig 中调用了 config.MapHttpAttributeRoutes();

    【讨论】:

    • 查看以上问题的编辑,但仍未解决
    【解决方案3】:

    要使 WebAPI 正常工作,需要做几件事。

    添加这是你的项目:

    using System.Web.Http;
    
        namespace WebConfig
        {
            public static class WebApiConfig
            {
                public static void Register(HttpConfiguration config)
                {
                    config.MapHttpAttributeRoutes();
                }
            }
        }
    

    然后在您的Global.asax 文件中,将其添加到Application_Start 以调用Register 方法:

    GlobalConfiguration.Configure(WebApiConfig.Register);
    

    另外,在 Web 服务中,尝试更改以下值以测试路由:

    [RoutePrefix("api")]
    public class DefCurrencyController : ApiController
    {
        [Route("currencies")]
        public HttpResponseMessage Get()
        {
           return new HttpResponseMessage(System.Net.HttpStatusCode.OK);
        }
    }
    

    【讨论】:

    • 通话仍未到达
    • 查看以上问题中的编辑,但仍未解决
    • 你有没有像我一样尝试过代码??我有 RoutePrefix 和 Route;这就是我在自己的代码中使用的,它可以工作。此外,出于测试目的,我建议您使用 jquery ajax 设置客户端调用,只是为了测试并使其正常工作。并且暂时删除货币的实际实现,只需返回一个字符串“它可以工作”即可。
    猜你喜欢
    • 2021-07-12
    • 1970-01-01
    • 1970-01-01
    • 2019-03-30
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2019-06-14
    • 2013-08-16
    相关资源
    最近更新 更多