Azure功能不反序列化对象

时间:2017-07-16 16:17:52

标签: c# json azure visual-studio-2017 azure-functions

在最新版本的Azure Functions中,我无法获得在对象中反序列化对象的函数。

版本:

Azure功能核心工具: 1.0.0-beta.100

功能运行时版本: 1.0.11015.0

Visual Studio: 15.3.0预览4.0

示例(不工作):

[FunctionName("Login")]
public static async Task<HttpResponseMessage> Login([HttpTrigger(AuthorizationLevel.Function, "post", Route = null)]HttpRequestMessage req, ILogger log, AuthenticatingUser user)
{
    return await Task.Run(() =>
    {
        return req.CreateResponse(HttpStatusCode.OK, user.Username);
    });
}

当试图使用Postman发布到此函数时,我总是会收到以下错误:

  

执行函数时出现异常:Functions.Login。 Microsoft.Azure.WebJobs.Host:异常绑定参数&#39; user&#39;。 Microsoft.Azure.WebJobs.Host:没有为参数&#39; user&#39;提供任何值。

我尝试过使用form-data,x-www-form-urlencoded和raw(选择了JSON - 我期望的工作)。最终都会出现同样的错误。

当我从函数中取出用户时,我可以通过以下方式访问传入的JSON:

var content = req.Content;
string jsonContent = content.ReadAsStringAsync().Result;

在以前版本的Azure功能中(值得注意的是使用Visual Studio扩展构建,涉及JSON文件等),这可以按预期工作。

我发布了以下各种版本:

{
    "Username": "myUserName",
    "Password": "MyPassword123"
}

用户模型:

public class AuthenticatingUser
{
    public string Username { get; set; }
    public string Password { get; set; }
}

1 个答案:

答案 0 :(得分:4)

您应该使用user属性标记HttpTrigger参数:

public static async Task<HttpResponseMessage> Login(
    HttpRequestMessage req, 
    [HttpTrigger(AuthorizationLevel.Function, "post")] AuthenticatingUser user)

req仍然会填充,但没有任何属性。

确保您的请求的Content-Type标头设置为application/json。鉴于此,该函数将在请求体中与您的JSON一起使用。