C# GetCookies()在WebApi控制器中返回null
我有两个项目,一个是客户端,另一个是API提供者。当我向api提供程序发送请求时,“request.Headers.GetCookies()”在客户端部分上有值,但在C# GetCookies()在WebApi控制器中返回null,c#,asp.net,asp.net-mvc,asp.net-web-api,asp.net-web-api2,C#,Asp.net,Asp.net Mvc,Asp.net Web Api,Asp.net Web Api2,我有两个项目,一个是客户端,另一个是API提供者。当我向api提供程序发送请求时,“request.Headers.GetCookies()”在客户端部分上有值,但在 public class AuthorizationServerProvider : OAuthAuthorizationServerProvider { public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredenti
public class AuthorizationServerProvider : OAuthAuthorizationServerProvider
{
public override async Task GrantResourceOwnerCredentials(OAuthGrantResourceOwnerCredentialsContext context)
{
var test1 = context.Request.Headers.ToList().FirstOrDefault(h => h.Key == "Cookie");
test1为null,并且为空
public class CustomAuthorizeAttribute : AuthorizeAttribute
{
public override void OnAuthorization(HttpActionContext actionContext)
{
var test2 = actionContext.Request.Headers.GetCookies();
test2为空,这是我发送请求的方式:
[HttpPost]
public ActionResult PostToApiProvider(RequestViewModel requestModel)
{
var request = new HttpResponseMessage();
// Here I add cookie header in request for authentification
if (HttpContext.Request.Cookies.Count != 0)
{
var cookieList = new List<string>();
for (var i = 0; i < Request.Cookies.Count; i++)
{
cookieList.Add(Request.Cookies[i].Value);
}
request.Headers.Add("Cookie", cookieList);
}
var response = client.SendAsync(request).Result;
var testRequestCookies = request.Headers.GetCookies();
return View("SomeView", model)
[HttpPost]
公共操作结果PostToApiProvider(RequestViewModel requestModel)
{
var request=newhttpresponsemessage();
//在这里,我在身份验证请求中添加cookie头
if(HttpContext.Request.Cookies.Count!=0)
{
var cookieList=新列表();
对于(变量i=0;i
request和TestRequestCookie(调用api提供程序之前和之后)将具有cookie值,请参见屏幕截图:
如果我能在更多代码方面提供帮助,请询问。谢谢:)以下是如何获取cookie值
private async Task<string> GetCookieValue(string url, string cookieName)
{
var cookieContainer = new CookieContainer();
var uri = new Uri(url);
using (var httpClientHandler = new HttpClientHandler
{
CookieContainer = cookieContainer
})
{
using (var httpClient = new HttpClient(httpClientHandler))
{
await httpClient.GetAsync(uri);
var cookie = cookieContainer.GetCookies(uri).Cast<Cookie>().FirstOrDefault(x => x.Name == cookieName);
return cookie?.Value;
}
}
}
private异步任务GetCookieValue(字符串url,字符串cookieName)
{
var cookieContainer=新的cookieContainer();
var uri=新的uri(url);
使用(var httpClientHandler=新的httpClientHandler
{
CookieContainer=CookieContainer
})
{
使用(var httpClient=新的httpClient(httpClientHandler))
{
等待httpClient.GetAsync(uri);
var cookie=cookieContainer.GetCookies(uri.Cast().FirstOrDefault(x=>x.Name==cookieName);
返回cookie?值;
}
}
}