所以我正在为一个 WebAPI 应用程序制作一个概念验证原型,所有常用方法都很好用。但我也想证明能够通过 WebAPI 调用自定义方法。所以我的 RouteConfig.cs 中有以下路由:
routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{id}",
defaults: new { id = RouteParameter.Optional }
);
在控制器中,我有一个简单的方法:
[HttpGet]
public string Test()
{
return "this is a string";
}
当我尝试调用我的方法时:http://localhost:43225/api/values/test
我在浏览器中收到以下错误:
<string xmlns="http://schemas.microsoft.com/2003/10/Serialization/">
The parameters dictionary contains a null entry for parameter 'id' of non-nullable type 'System.Int32' for method 'System.String Get(Int32)' in 'WebAPI_Listener.Controllers.ValuesController'. An optional parameter must be a reference type, a nullable type, or be declared as an optional parameter.
</string>
但是,如果我在 url 的末尾指定一个 ID,例如http://localhost:43225/api/values/test/1
它可以工作,即使方法本身根本不带参数。
因此,在路由中,如果我将 id} 设置为可选,为什么当我不指定 {id} 时它不起作用,但如果我这样做了,即使方法本身不期望 { ID}??