MVC API路由不起作用

时间:2013-11-20 21:11:34

标签: c# asp.net-mvc asp.net-web-api

我需要第二眼。我无法弄清楚我做错了什么。我的路由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

2 个答案:

答案 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)中的电话:

使用这些标题的PUThttp://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”,“I​​sCellPhone”:“false “,”Captcha“:”false“,”IsValid“:”true“,”IsAnyMessageShown“:”false“,”MoveDate“:”2013-01-01“,”密码“:”Password1“,”PasswordConfirm“: “密码1”}

Visual Studio中断点的结果:

Json Api call example

答案 1 :(得分:-1)

您是否尝试在[FromBody]password上添加passwordConfirm属性?这些参数不会被设置,因为字符串或int(或任何其他值类型)是从查询字符串中获取的,而不是请求的主体。