Web API调用无法到达?

时间:2015-06-18 10:34:15

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

我在我的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 - 未找到您正在寻找的资源   删除,更改名称或暂时不可用。

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

3 个答案:

答案 0 :(得分:2)

抛弃控制器上的RoutePrefix属性,只需在方法上声明所需的路径:

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

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

此外,您在这里不需要HttpPost,这应该只是GET。

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

答案 1 :(得分:1)

答案 2 :(得分:1)

使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);
    }
}