Jquery Ajax Post响应头始终返回null
我试图读取响应头“Token”中的值。这是我的jquery ajax代码Jquery Ajax Post响应头始终返回null,jquery,ajax,http-headers,httpresponse,Jquery,Ajax,Http Headers,Httpresponse,我试图读取响应头“Token”中的值。这是我的jquery ajax代码 $(document).ready(function () { $("#post").click(function () { $.ajax({ type: "Post", url: 'http://localhost:1505/api/user/Login', data: $("
$(document).ready(function () {
$("#post").click(function () {
$.ajax({
type: "Post",
url: 'http://localhost:1505/api/user/Login',
data: $("#form1").serialize(),,
success: function (data, status, xhr) {
switch (status) {
case "Not Found":
alert("Wrond Credentials.LogIN Again");
break;
case "success":
alert("Hi");
var token= xhr.getResponseHeader("Token");
alert(token);
break;
}
}
});
});
});
我检查了我在chrome“Inspect Element”中得到的响应标题,并验证了它是否存在。但是,当我在javascript代码中设置断点并检查getResponseHeader函数返回的值时,它是空的
这就是我添加标题的方式
public string Login(User user)
{
if (ModelState.IsValid)
{
var found = (from p in db.Users
where (p.user == user.user && p.password == user.password)
select p).FirstOrDefault();
if (found == null)
{
return "Not Found";
}
// HttpResponseMessage response2 = Request.CreateResponse(HttpStatusCode.Found);
Token token = new Token();
string resptok = token.Generate(user);
HttpContext.Current.Response.AddHeader("Token", resptok);
return "Found";
}
我还有一个处理程序类来启用CORS。这是代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Net.Http;
using System.Threading.Tasks;
using System.Threading;
using System.Net;
namespace AuthenticationDemo.Handlers
{
public class CorsHandler : DelegatingHandler
{
const string Origin = "Origin";
const string AccessControlRequestMethod = "Access-Control-Request-Method";
const string AccessControlRequestHeaders = "Access-Control-Request-Headers";
const string AccessControlAllowOrigin = "Access-Control-Allow-Origin";
const string AccessControlAllowMethods = "Access-Control-Allow-Methods";
const string AccessControlAllowHeaders = "Access-Control-Allow-Headers";
protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
{
bool isCorsRequest = request.Headers.Contains(Origin);
bool isPreflightRequest = request.Method == HttpMethod.Options;
if (isCorsRequest)
{
if (isPreflightRequest)
{
return Task.Factory.StartNew<HttpResponseMessage>(() =>
{
HttpResponseMessage response = new HttpResponseMessage(HttpStatusCode.OK);
response.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
string accessControlRequestMethod = request.Headers.GetValues(AccessControlRequestMethod).FirstOrDefault();
if (accessControlRequestMethod != null)
{
response.Headers.Add(AccessControlAllowMethods, accessControlRequestMethod);
}
string requestedHeaders = string.Join(", ", request.Headers.GetValues(AccessControlRequestHeaders));
if (!string.IsNullOrEmpty(requestedHeaders))
{
response.Headers.Add(AccessControlAllowHeaders, requestedHeaders);
}
return response;
}, cancellationToken);
}
else
{
return base.SendAsync(request, cancellationToken).ContinueWith<HttpResponseMessage>(t =>
{
HttpResponseMessage resp = t.Result;
resp.Headers.Add(AccessControlAllowOrigin, request.Headers.GetValues(Origin).First());
return resp;
});
}
}
else
{
return base.SendAsync(request, cancellationToken);
}
}
}
使用系统;
使用System.Collections.Generic;
使用System.Linq;
使用System.Web;
使用System.Net.Http;
使用System.Threading.Tasks;
使用系统线程;
Net系统;
命名空间AuthenticationDemo.Handlers
{
公共级CorsHandler:授权管理员
{
常量字符串Origin=“Origin”;
const string AccessControlRequestMethod=“访问控制请求方法”;
const string AccessControlRequestHeaders=“访问控制请求头”;
常量字符串AccessControlAllowOrigin=“访问控制允许原点”;
const string AccessControlAllowMethods=“访问控制允许方法”;
const string accesscontrolalloweaders=“访问控制允许标头”;
受保护的覆盖任务SendAsync(HttpRequestMessage请求,CancellationToken CancellationToken)
{
bool isCorsRequest=request.Headers.Contains(来源);
bool isPreflightRequest=request.Method==HttpMethod.Options;
如果(isCorsRequest)
{
如果(isPreflightRequest)
{
返回Task.Factory.StartNew(()=>
{
HttpResponseMessage response=新的HttpResponseMessage(HttpStatusCode.OK);
Add(AccessControlAllowOrigin、request.Headers.GetValues(Origin.First());
字符串accessControlRequestMethod=request.Headers.GetValues(accessControlRequestMethod.FirstOrDefault();
if(accessControlRequestMethod!=null)
{
Add(AccessControlAllowMethods,accessControlRequestMethod);
}
string requestedHeaders=string.Join(“,”,request.Headers.GetValues(AccessControlRequestHeaders));
如果(!string.IsNullOrEmpty(requestedHeaders))
{
添加(AccessControlAllowHeaders、requestedHeaders);
}
返回响应;
},取消令牌);
}
其他的
{
返回base.SendAsync(请求,取消令牌).ContinueWith(t=>
{
httpresponsemessageresp=t.结果;
resp.Headers.Add(AccessControlAllowOrigin,request.Headers.GetValues(Origin.First());
返回响应;
});
}
}
其他的
{
返回base.sendaync(请求、取消令牌);
}
}
}
}在ajax中发布如何添加标题,请发布该代码too@SridharNarasimhan我已经添加了代码。非常感谢。