由于某种原因,我可以将这两个JSON请求发送到我的WebAPI,它会接受并创建一个用户。一个用双引号,一个不用。WebAPI接受通过Fiddler发送破碎的JSON
{"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
。
所以我的问题是,那么动作名称的目的是什么?我怎样才能做到这一点,所以这是必须的网址?另外为什么它接受这两个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 }
);
谢谢您的时间
/两次
我不知道我明白这是什么'action =“get”'?此外,我更新了我的问题,我包括我的webconfigs,但它仍然无法正常工作。我仍然可以在没有'/ create'的情况下进行POST。 – brk 2013-04-23 09:18:07
'action =“get”'表示默认的'{action}'参数是'“get”'。它试图复制Web API的原始行为。另外,如果您使用的是两条路线,则不进行任何操作的发帖仍然会遵循第一条路线。你需要删除它。 – 2013-04-23 12:49:21
但是,如果我删除第一个配置,那么我将如何能够通过ID获取用户?我希望能够通过当前有效的id和用户名来获取用户。不过,我看到你的意思,它允许我在没有'/ create'的情况下进行POST,因为它会遵循第一个路由配置。任何想法如何设置它而不删除第一个配置或禁止我通过ID获取用户也? – brk 2013-04-23 14:17:38