【发布时间】:2013-04-23 16:44:39
【问题描述】:
出于某种原因,我可以将这两个 JSON 请求发送到我的 WebAPI,它会接受并创建一个用户。一个带双引号,一个不带。
{"Username":"Bob", "FirstName":"Foo", "LastName":"Bar", "Password":"123", "Headline":"Tuna"}
{Username:"Bob", FirstName:"Foo", LastName:"Bar", Password:"123", Headline:"Tuna"}
这是创建用户的方法。
// localhost:12345/api/controller/create
[ActionName("create")]
public HttpResponseMessage PostUser(User user)
{
if (ModelState.IsValid)
{
db.Users.Add(user);
db.SaveChanges();
HttpResponseMessage response = Request.CreateResponse(HttpStatusCode.Created, user);
response.Headers.Location = new Uri(Url.Link("DefaultApi", new { id = user.UserId }));
return response;
}
else
{
return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}
}
但是,我可以在 URL 末尾没有 /create 的情况下发出成功的 POST 请求。我假设 POST 请求成功的原因是因为无论操作名称是否存在,它都会在方法名称中搜索Post。
所以我的问题是,动作名称的目的是什么?我怎样才能使它成为 URL 中的必须项?还有为什么它同时接受 JSON 请求,我怎样才能让它接受一个或另一个。
编辑:
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// Routing by Action-name
config.Routes.MapHttpRoute(
name: "ActionApi",
routeTemplate: "api/{controller}/{action}/{username}",
defaults: new { username = RouteParameter.Optional }
);
感谢您的宝贵时间
/两次
【问题讨论】:
标签: c# json asp.net-mvc-4 asp.net-web-api