一点点asp.net mvc noob,我试图传入一个字符串作为我的Web API控制器的参数:
public class ValuesController : ApiController
{
// GET api/values
public IEnumerable<string> Get()
{
return new string[] { "value1", "value2" };
}
// GET api/values/5
public string Get(int id)
{
return "value";
}
public string Get(string arg)
{
return "othervalue";
}
}
我试图添加另一条路线:
routes.MapRoute(
name: "Default2",
url: "{controller}/{action}/{arg}",
defaults: new { controller = "Home", action = "Index", arg = UrlParameter.Optional }
);
所以我想保留两个Get方法并使用带有arg参数的Get,这样我就可以传入一个字符串。因此,当我尝试在浏览器中点击此URL“api / values / jjhjh”时,我收到此错误:
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.String Get(Int32)' in 'stackOverflowWebApi.Controllers.ValuesController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
答案 0 :(得分:1)
您添加的其他路由是MVC路由,而不是WebAPI路由。 WebAPI路由默认不在RouteConfig.cs中,它们位于WebApiConfig.cs中。他们看起来更像是这样:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
您发布的错误来自于完全没有传递任何数据。试试这个:
public string Get(string id = null)
{
return "othervalue";
}
请注意,参数名称为id
,而不是arg
,以使其与可选的路由参数匹配。此外,将其默认为null告诉绑定器在没有数据传递时可以调用此方法。