3

WindowsPhone7とasp.netWebAPIを使用するときに、どのようにデータをやり取りするのでしょうか。

私は私の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);
}

作成されるURLは次のとおりです。http://localhost:50570/api/user/get?email=c

ただし、Vmは常にnullです。

4

1 に答える 1

0

Web.Api は、単純なパラメーター (int、string など) を URL から、複雑な型 (その他のカスタム型) を要求本文から会話的にバインドします。

VerifyUserVmURL から複雑なタイプ (例: クエリ文字列) をバインドする場合は、パラメーターに次の注釈を付ける必要がありますFromUriAttribute

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

もう 1 つ: プロパティの大文字と小文字は一致する必要があります。

VMEmailでは大文字を使用していますが、小文字Eで送信emailしますe

したがって、次のようにパラメーターを作成する必要があります。

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

詳細については、WebAPI がパラメーター バインドを行う方法を参照してください。

于 2013-01-26T17:01:15.307 に答える