在最新版本的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; }
}
答案 0 :(得分:4)
您应该使用user
属性标记HttpTrigger
参数:
public static async Task<HttpResponseMessage> Login(
HttpRequestMessage req,
[HttpTrigger(AuthorizationLevel.Function, "post")] AuthenticatingUser user)
req
仍然会填充,但没有任何属性。
确保您的请求的Content-Type
标头设置为application/json
。鉴于此,该函数将在请求体中与您的JSON一起使用。