- android - 多次调用 OnPrimaryClipChangedListener
- android - 无法更新 RecyclerView 中的 TextView 字段
- android.database.CursorIndexOutOfBoundsException : Index 0 requested, 光标大小为 0
- android - 使用 AppCompat 时,我们是否需要明确指定其 UI 组件(Spinner、EditText)颜色
我有一个 API 调用,它使用 Refit 返回 IHttpActionResult
。
[Patch("/api/userprofile/")]
[Headers("Authorization: Bearer")]
Task<IHttpActionResult> UpdateUserProfile(UserProfile user);
我在单独的 DLL 中创建了一个单独的类来处理 API 调用。
public async Task<IHttpActionResult> UpdateUserProfile(UserProfile profile)
{
if (HttpContext.Current.Request.IsAuthenticated)
{
var ups = ApiServiceFactory.GetUserProfileService();
var result = ups.UpdateUserProfile(profile);
return result.Result;
}
return ???;
}
这个类目前不派生自APIController,那么如何创建一个继承自IHttpActionResult
的对象。我尝试了 ResponseMessage
、HttpResponseMessage
、Ok
和 Content(Status, Message)
。其中大部分需要从 APIContoller
派生。仅仅创建一个对象似乎有点矫枉过正。
那么我如何创建一个继承自 IHttpActionResult
的对象,以从普通类/方法返回类似 401 的内容?
最佳答案
如果您要分离职责,那么您应该分离所有职责。
您的 UdpateUserProfile
方法应该不知道它是从哪里调用的。如果您想在线添加 WPF 客户端,则根本不必更改此类。在那种情况下,您不会返回 IHttpActionResult
,您会做其他事情。
因此,从您的方法中删除该依赖项。让它通知它的任务是否成功。在这种情况下,bool
可能更适合作为返回值。如果您想返回额外的信息,您可以创建一个简单的模型来封装您想要返回的任何其他数据。
public class AuthorizationResult
{
public bool Result { get; set; }
public string Message { get; set; }
public AuthorizationResult()
{
Result = true;
}
public AuthorizationResult(string errorMessage)
{
Result = false;
Message = errorMessage;
}
}
然后在您的服务中。
public async Task<AuthorizationResult> UpdateUserProfile(UserProfile profile)
{
try
{
var ups = ApiServiceFactory.GetUserProfileService();
var result = ups.UpdateUserProfile(profile);
return new AuthorizationResult();
}
catch (Exception ex)
{
// Just an example of how to get a message.
// Depending on your implementation, you might be returning a
// message from UpdateUserProfile(profile).
return new AuthorizationResult(ex.Message);
}
}
然后,在您的 API Controller 内部,您将它与技术紧密耦合,因为它直接在那里使用。您检查用户是否已通过身份验证的检查也应包含在此处,因为您的服务对用户身份验证的机制一无所知。
var result = HttpContext.Current.Request.IsAuthenticated ?
separateClass.UpdatedUserProfile(profile) :
new AuthorizationResult("User is not authenticated");
return result.Result ? Ok() : Unauthorized();
从您的配置文件服务的返回类型来看,听起来您还需要重构 UpdateUserProfile()
方法,以移除那里的依赖项。
为了获得最佳安全性,您不应显示无法更新用户的任何具体原因。但是,这绝对应该记录在某个地方,以便您可以跟踪任何未经授权的系统访问。
关于c# - 如何从非 Controller 创建通用的未经授权的 IHttpActionResult,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41231247/
据我所知,要将声音设置为铃声,应将其插入 MediaStore。在 MediaStore 中写入,需要 WRITE_EXTERNAL_STORAGE 权限。但是...有没有办法在不需要 WRITE_E
我只是想设置铃声。我不想授予 WRITE_SETTINGS 权限,我可以找到大部分答案来授予 WRITE_SETTINGS 权限但是我正在使用一个应用程序,该应用程序没有设置铃声的 WRITE_SET
我在 Windows 10 中以管理员身份运行 Android studio。AVD 是 Nexus 5X API 28。我正在尝试运行 flutter 演示,但设备下拉框仍然显示“无设备”,它只是有
我的应用程序构建于 spring-social-twitter允许用户使用 Twitter 登录的功能最近已停止工作。 我收到如下错误消息: Callback URL not approved for
我正在尝试使用 python-firebase 更新 Firebase库,但无法使用经过修改的示例代码进行身份验证: from firebase import firebase as fb auth
今天,当我尝试使用 GCC7 编译一个非常简单的 C++ 程序时,我遇到了一个非常奇怪的问题:程序没有向构造函数中的 vector 添加任何元素,当编译时没有优化(例如 -O0/-Og ) 来自 Re
简单问题:我正在尝试使用 Discord API 备份服务器(或公会,如果您使用官方术语)上的所有消息。 因此,我实现了 OAuth,没有任何问题,我有访问 token ,并且可以查询一些端点(我尝试
您好,我正在使用 msdn 中的以下代码供我公司内部使用: using System; public sealed class Singleton { private static volati
我们从 Google 的 GCM 服务中收到间歇性的 401 Unauthorized 错误。在过去,它 100% 的时间都有效。该问题可能与我们的路由器接受 IPv6 流量同时发生,但即使我们在适配
我有一个使用 Playwright + TS-Jest 设置 E2E 测试的项目。为了组织我的测试,我使用页面对象模型。结构看起来像这样: 我想在 tsconfig.json 中使用 TypeScri
我有一个后端应用程序在 Google Cloud Storage 中同步文件,我想在 javascript 中列出存储中的所有文件,而不需要从后端请求它们。我已经设置了 CORS,并且所有文件的 ac
我在尝试在私有(private) gitlab 存储库中发布 Artifact 时遇到问题。我正在使用 Maven 并使用个人访问 token 进行身份验证。当我运行 mvn deploy -s ~/
这是从 Google+ 登录中使用的 GoogleApiClient 获取 token 的传统方式: String token = GoogleAuthUtil.getToken(apiClient.
我在阅读 facebook Open Graph 文档后比较确定我不能让网站“订阅”公共(public)页面,除非该页面安装了我的应用程序。如果那是错误的,请告诉我。 我想做的是一个照片库,非常简单,
我是一名优秀的程序员,十分优秀!