出于某种原因,我可以将这两个 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);
}
}
但是,我可以在没有/create
URL 末尾的情况下发出成功的 POST 请求。我假设 POST 请求成功的原因是因为无论操作名称是否存在,它都会Post
在方法名称中搜索 a 。
所以我的问题是,动作名称的目的是什么?我怎样才能使它成为 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 }
);
感谢您的时间
/两次