我需要第二眼。我无法弄清楚我做错了什么。我的路由api工作在某一点现在它根本不会表现。我刚收到404错误或405错误。
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
[HttpPut]
public HttpResponseMessage Put([FromBody]Preregistration prereg, string password, string passwordConfirm)
{
// guts
return Request.CreateResponse(HttpStatusCode.OK, new[] { "ok" });
}
如果我删除了put方法的所有参数,它就会起作用,我会得到一个响应,但当我添加它们时,它会失败。
以下是我在http正文中发送到服务器的内容:
prereg[firstName] test
prereg[lastName] test
prereg[email] test@test.org
prereg[emailConfirm] test@test.org
prereg[isCellPhone] false
prereg[captcha] false
prereg[isValid] true
prereg[isAnyMessageShown] false
prereg[moveDate] 11/30/2013
password Password1
passwordConfirm Password1
答案 0 :(得分:0)
如果您愿意将password
与其他属性一起移动到某个对象,这将有效:
用户模型:
public class User
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string Email { get; set; }
public string EmailConfirm { get; set; }
public bool IsCellPhone { get; set; }
public bool Captcha { get; set; }
public bool IsValid { get; set; }
public bool IsAnyMessageShow { get; set; }
public DateTime MoveDate { get; set; }
public string Password { get; set; }
public string PasswordConfirm { get; set; }
}
控制器:
public void Put(User user)
{
// do stuff
}
fiddler(json)中的电话:
使用这些标题的PUT
到http://localhost:1099/api/values
(在我的机器上):
User-Agent: Fiddler
Host: localhost:1099
Content-Type: application/json; charset=utf-8
这个身体:
{“FirstName”:“first”,“LastName”:“Test”,“Email”:“test@test.org”,“EmailConfirm”:“test@test.org”,“IsCellPhone”:“false “,”Captcha“:”false“,”IsValid“:”true“,”IsAnyMessageShown“:”false“,”MoveDate“:”2013-01-01“,”密码“:”Password1“,”PasswordConfirm“: “密码1”}
Visual Studio中断点的结果:
答案 1 :(得分:-1)
您是否尝试在[FromBody]
和password
上添加passwordConfirm
属性?这些参数不会被设置,因为字符串或int(或任何其他值类型)是从查询字符串中获取的,而不是请求的主体。