【发布时间】:2015-07-01 12:59:02
【问题描述】:
我应该先向你展示我的RouteConfig.cs:
public static void Register(HttpConfiguration configuration)
{
configuration.Routes.MapHttpRoute("noKey",
"{controller}");
configuration.Routes.MapHttpRoute("oneKey",
"{controller}/{id}");
configuration.Routes.MapHttpRoute("twoKeys",
"{controller}/{firstKey}/{secondKey}");
// SomeProperty -> someProperty
var jsonFormatter = configuration.Formatters.OfType<JsonMediaTypeFormatter>().First();
jsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
}
我有以下基类:
public abstract class RestController<Key, PostDTO, PutDTO, QueryData>
{
// ...
protected abstract Task<IHttpActionResult> Put(Key id, PutDTO dto);
// ...
[HttpPut]
[ValidateArgument("dto")]
public async Task<IHttpActionResult> BasePut([FromUri] Key id, [FromBody] PutDTO dto)
{
return await Put(id, dto);
}
}
ValidateArgumentAttribute 是我创建的用于验证输入 DTO 的自定义属性。
我正在尝试这样调用此方法:
HTTP PUT - /users/mcicero
如您所见,我有一个 UsersController (/users),我想使用密钥 mcicero (/users/mcicero) 向实体发出 PUT 请求。
DTO 随请求负载一起发送,由[FromBody] 参数属性表示。
但是,我收到了 404 Not Found 响应,好像端点无法解析为有效路由。
这可能是什么问题?
【问题讨论】:
-
“Key”的实际类型是什么?
-
@hazjack 在这个例子中(UsersController),它的类型是
string -
您是否仔细检查了 url / 端口?我认为它应该工作。我的类似案例效果很好:)
-
@hazjack 对我来说一切看起来都很正常。你是如何让它工作的?可能是因为三个配置的路由?
标签: c# asp.net .net asp.net-web-api routing