3

我想知道在使用 Windows Phone 7 和 asp.net web api 时如何来回发送数据?

我的 webapi 中有这个方法

public HttpResponseMessage Get(VerifyUserVm vm)
{
    if (ModelState.IsValid)
    {
        userService.ValidateUser(vm.Email);

        if (userService.ValidationDictionary.IsValid)
        {
            HttpResponseMessage reponse = Request.CreateResponse(HttpStatusCode.OK, userService.ValidationDictionary.ModelState["Success"]);
            return reponse;
        }
        else
        {
            return Request.CreateResponse(HttpStatusCode.BadRequest, userService.ValidationDictionary.ModelState);
        }
    }

    return Request.CreateErrorResponse(HttpStatusCode.BadRequest, ModelState);
}

public class VerifyUserVm
{
    [Required]
    public string Email { get; set; }
}

和我的 WP7 中的这段代码

private void btnSignIn_Click(object sender, RoutedEventArgs e)
{
    string urlPath = String.Format(WebApiHelp.ApiUrl,"user","get");            
    UriBuilder uri = new UriBuilder(urlPath);
    uri.Query = "email=" + txtEmail.Text;
    webclient.OpenReadAsync(uri.Uri);
}

得到的网址是这样的:http://localhost:50570/api/user/get?email=c

但 Vm 始终为空。

4

1 回答 1

0

Web.Api 以会话方式绑定来自 URL 的简单参数(int、string 等)和来自请求正文的复杂类型(任何其他自定义类型)。

如果您想VerifyUserVm从 url 绑定复杂类型(例如:查询字符串),您需要使用以下注释来注释参数FromUriAttribute

public HttpResponseMessage Get([FromUri]VerifyUserVm vm)
{
     //..
}

还有一件事:属性的大小写应该匹配:

在您的 VM 中,您Email使用大写字母E,但发送email时使用小写字母e

所以你需要像这样构建你的参数:

uri.Query = "Email=" + txtEmail.Text;

进一步阅读:WebAPI 如何进行参数绑定

于 2013-01-26T17:01:15.307 回答