gpt4 book ai didi

c# - 如何在 Azure 移动服务 TableController GET 模板方法上返回 BadRequest?

转载 作者:行者123 更新时间:2023-12-03 01:53:02 24 4
gpt4 key购买 nike

我正在使用 Azure 移动服务(遵循标准 Azure TodoItems 教程),它们提供的最基本的 GET 方法是:

public IQueryable<MyModel> GetAllMyInfo()
{
return Query();
}

这可行,但我正在尝试扩展它,以便该方法仅返回经过身份验证的用户的 MyModel 数据(由 X-ZUMO-AUTH 身份验证标识)移动服务 API 调用的 header 标准)。所以我修改了代码:

public IQueryable<MyModel> GetAllMyInfo()
{
// Get the current user
var currentUser = User as ServiceUser;
var ownerId = currentUser.Id;
return Query().Where(s => s.OwnerId == ownerId);
}

当传递有效的身份验证 token 时,这也适用。 但是,如果传递了无效的身份验证 header ,则 currentUsernull,并且查询会失败(显然)。因此,我尝试检查 null 并返回 BadRequest403 HTTP 代码。然而,一个简单的 `return BadRequest("Invalidauthentication") 会给出一个编译错误:

public IQueryable<MyModel> GetAllMyInfo()
{
// Get the current user
var currentUser = User as ServiceUser;
if(currentUser == null) {
return BadRequest("Database has already been created."); // This line gives a compilation error saying I need a cast.
}
var ownerId = currentUser.Id;

return Query().Where(s => s.OwnerId == ownerId);
}

有人知道如何检查有效的身份验证 token 并在此方法上返回 403 (需要 IQueryable 返回类型吗?

最佳答案

您可以在此方法上使用[AuthorizeLevel] 属性来指示必须存在有效​​ token 才能调用该方法。如果没有,它将返回 401。

所以你的完整方法是:

[AuthorizeLevel(AuthorizationLevel.User)]
public IQueryable<MyModel> GetAllMyInfo()
{
// Get the current user
var currentUser = User as ServiceUser;
var ownerId = currentUser.Id;
return Query().Where(s => s.OwnerId == ownerId);
}

请注意,对于 Azure 移动应用 SDK(而非移动服务),上述属性只需替换为 [Authorize]

关于c# - 如何在 Azure 移动服务 TableController GET 模板方法上返回 BadRequest?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/31896118/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com