为什么没有参数绑定到WebAPI应用程序?

时间:2016-09-16 17:02:37

标签: c# .net rest asp.net-web-api get

我正在访问这样的WebAPI资源:

localhost/myapp/api/values?ParamOne=123&ParamTwo=testing

在ValuesController中,我有这个:

public class MyParams {
  public int? ParamOne {get;set;}
  public string ParamTwo {get;set;}
}

[HttpGet]
public HttpResponseMessage Get([FromUri]MyParams someparams) {
  ...
}

当我尝试访问资源时,出现此错误:

  

HTTP错误403.14禁止将Web服务器配置为不列出   该目录的内容

这里是RouteConfig.cs,这只是默认值:

routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
  name: "Default",
  url: "{controller}/{action}/{id}",
  defaults: new {controller="Home", action="Index", id=UrlParameter.Optional}

任何人都知道我做错了什么?

1 个答案:

答案 0 :(得分:1)

您的WebAPI Get端点期望someparams作为参数 ParamOneParamTwo

将端点签名更改为以下内容应与给定的URL一起使用:

  

本地主机/ MyApp的/ API /值ParamOne = 123&安培; ParamTwo =测试

public HttpResponseMessage Get(int? ParamOne, string ParamTwo)

<强>更新

您问题中的路由配置适用于MVC控制器而非WebAPI控制器。请参阅下面的WebAPI路由配置:

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}/{id}",
                    defaults: new { id = RouteParameter.Optional }
            );
        }
    }

在Global.asax.cs Application_Start()方法中,它的注册方式如下:

GlobalConfiguration.Configure(WebApiConfig.Register);

需要NuGet包:

  • Microsoft.AspNet.WebApi.Core
  • Microsoft.AspNet.WebApi.WebHost

还有一件事,你的控制器必须继承ApiController 而不是 Controller