asp.net - 如何将 FormsAuthentication cookie 添加到 HttpClient HttpRequestMessage

标签 asp.net asp.net-mvc unit-testing asp.net-web-api integration-testing

我试图通过调用 FormsAuthentication.SetAuthCookie("someUser", false);
在集成测试内部进行身份验证 之后,我确实需要调用 WebAPI 并且不会收到未经授权的异常,因为我已经应用了授权属性。 我正在使用此代码来创建身份验证 cookie:

var cookie = FormsAuthentication.GetAuthCookie(name, rememberMe);
    var ticket = FormsAuthentication.Decrypt(cookie.Value);

    var newTicket = new FormsAuthenticationTicket(ticket.Version, ticket.Name, ticket.IssueDate, ticket.Expiration,
        ticket.IsPersistent, userData.ToJson(), ticket.CookiePath);
    var encTicket = FormsAuthentication.Encrypt(newTicket);

    /// Use existing cookie. Could create new one but would have to copy settings over...
    cookie.Value = encTicket;

现在我想将此 cookie 添加到新 HttpClient 内的 HttpRequestMessage 中,并在集成测试中与我的常规请求一起发送。

我不知道如何将该身份验证 cookie 添加到 HttpRequestMessage ?

最佳答案

要操作cookie,您需要使用WebRequestHandlerHttpClient一起。例如,

 var handler = new WebRequestHandler();
 var client = new HttpClient(handler);
 // use handler to configure request such as add cookies to send to server

CookieContainer属性将允许访问 cookie 集合。

另一方面,我怀疑在客户端上创建 FormsAuthentication cookie 是否有效。客户端/服务器都需要相同的加密 key 。最好的方法是重播实际 Web API 的登录请求 - 最有可能的是,它是使用用户凭据登录页面的POST。使用 Fiddler 等工具在浏览器上观察相同的情况,并在您的 http 客户端中构造相同的请求。

关于asp.net - 如何将 FormsAuthentication cookie 添加到 HttpClient HttpRequestMessage,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13642466/

相关文章:

c# - 调用 Assert.IsInstanceOfType 时如何排除祖先?

java - 如何在java代码中运行mysqldump命令?

python - unittest.py 与 trace.py 配合不佳 - 为什么?

c# - 在 C# 中使用 HttpCookie 而不是 Session

c# - Application_Start 事件在发布时未触发

c# - View 显示不同的值,然后在其模型中显示不同的值

c# - 通过ajax将选中的复选框传递给 Controller

c# - 丢弃 DoAwait() VS Task.Run(() => DoAwait()) 有什么区别

c# - 使用 jquery 调用 C# 方法

c# - ASP.NET MVC API 库