无法在其余Web API中读取请求标头值

哈什塔克(Harshitha K)

我使用ajax将令牌存储在请求标头中,并将其发送到Rest Web api。这是我发送到Web api的请求:

  var xhr = new XMLHttpRequest();
            $.ajax({
                url: 'http://localhost:32253/api/UserDetail/Authenticate',
                headers: {
                    "Authorization-Token": res, 
                    "X-HTTP-Method-Override": "GET"
                },
                type: 'GET',
                async: false,
                contentType: "application/json",
                dataType: 'json',
                success: function (data) {
                    alert("Success from success callback!");
                    // ShowData(data);                    
                    $('#RId').text(data.RoleId);
                    $('#RDesc').text(data.RoleDescription);
                    $('#RName').text(data.RoleName);
                },
                error: function (xhr, status) {
                    alert(status);
                }
                //complete: function (data) {
                //    alert("Success!from complete function");
                // } 
            });

在服务器端(REST Web API),我试图读取标头

if (Request.Headers.Contains("Authorization-Token"))
            {
                var token = Request.Headers.GetValues("Authorization-Token").First();
}

但是该请求不包含标头“ Authorization-Token”。我可以在Access-Control-request-Headers中看到标题名称。我不知道如何读懂它的价值。有人可以帮我吗。我也启用了cors

更新现在我正在使用请求对象的标准Authorization标头传递令牌

$.ajax({
                url: 'http://localhost:32253/api/UserDetail/Authenticate',
                beforeSend: function (xhr) {
                    xhr.setRequestHeader("Authorization", "Basic " + res);
                },
                type: 'GET',
                async: false,
                contentType: "application/json",
                dataType: 'json',
                authorization: res,
                success: function (data) {
                    alert("Success from success callback!");
                    // ShowData(data);                    
                    $('#RId').text(data.RoleId);
                    $('#RDesc').text(data.RoleDescription);
                    $('#RName').text(data.RoleName);
                },
                error: function (xhr, status) {
                    alert(status);
                }
                //complete: function (data) {
                //    alert("Success!from complete function");
                // } 
            });

但我无法在请求标头中找到它。请参阅图像以获取更多详细信息请求标头

REQUEST LOG这是在服务器端收到的请求

OPTIONS /api/UserDetail/Authenticate HTTP/1.1
Connection: keep-alive
Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8
Accept-Encoding: gzip, deflate
Accept-Language: en-GB,en;q=0.5
Host: localhost:32253
User-Agent: Mozilla/5.0 (Windows NT 6.3; WOW64; rv:44.0) Gecko/20100101 Firefox/44.0
Access-Control-Request-Method: GET
Access-Control-Request-Headers: authorization-token,content-type
Origin: http://localhost:14576
哈什塔克(Harshitha K)

感谢Daniel的建议。就像您在“选项请求”中告诉的那样。我在OPTIONS请求的响应中设置了Access-Control-Allow-Headers。我在REST Web API的global.asax.cs中添加了以下内容

protected void Application_BeginRequest(object sender, EventArgs e)
        {
            HttpContext.Current.Response.AddHeader("Access-Control-Allow-Origin", "http://localhost:14576");
            if (HttpContext.Current.Request.HttpMethod == "OPTIONS")
            {
                HttpContext.Current.Response.AddHeader("Access-Control-Allow-Methods", "GET, POST, PUT, DELETE");

                HttpContext.Current.Response.AddHeader("Access-Control-Allow-Headers", "Content-Type, Accept, X-Authorization-Token, X-HTTP-Method-Override");
                HttpContext.Current.Response.End();
            }
        }

客户端请求代码如下:

 var xhr = new XMLHttpRequest();
            $.ajax({
                url: 'http://localhost:32253/api/UserDetail/Authenticate',
                beforeSend: function (xhr) {
                    xhr.setRequestHeader('X-Authorization-Token', res);
                    xhr.setRequestHeader('X-HTTP-Method-Override', "GET");
                },
                type: 'GET',
                async: false,
                dataType: 'json',
                success: function (data) {
                    alert("Success from success callback!");
                },
                error: function (xhr, status) {
                    alert(status);
                }
            });

其余的Web api代码,用于读取标头:

if (Request.Headers.Contains("X-Authorization-Token"))
            {

                var token = Request.Headers.GetValues("X-Authorization-Token").First();
}

这样很好。

谢谢您的时间和建议:)

本文收集自互联网,转载请注明来源。

如有侵权,请联系 [email protected] 删除。

编辑于
0

我来说两句

0 条评论
登录 后参与评论

相关文章

无法为请求中的标头值检查null

在标头请求Web Api中包含日期字段

无法从 ASP.NET Web API 中的 jQuery AJAX 请求获取标头

无法在ASP Net Core Web API中获取请求标头

无法从http请求标头读取文件名

增加Web Api OWIN自主机中的请求标头限制

无法通过钩子向 HTTP 请求添加标头值

Web API - 包括标头和正文的 HTTP Post 请求

无法在 PythonAnywhere 上获取 Flask python API 的请求标头

Laravel无法在nginx的请求中获取参数标头

无法在 Fetch Get 请求中设置任何标头

无法在Retrofit2中将GitHub API标头“授权令牌”添加到GET请求

无法从Asp.Net Core 2.0中的HTTP标头获取标头值

如何在Web API 2的IHttpActionResult中添加标头?

在Web API中设置“内容处置” HTTP标头

读取 ISAPI DLL 中的请求标头

Flutter Web-请求标头缺失

在 Web 请求中使用“主机”标头

无法正确指定 CORS 请求的标头

无法将标头附加到请求

无法从请求获取HTTP标头

从ASP.NET Web API 2响应中获取针对跨域http.get请求的Angular中的特定响应标头(例如Content-Disposition)。

在生产阶段无法获取标头请求Rails 5 API(AWS elasticbeanstalk)

在Ionic Angular应用程序中无法从HttpClient读取HttpResponse中的自定义标头

无法在Unity 3D中从存档文件中读取标头

启用CORS的Web API无法添加标头

Powershell - 如何从 Web 请求的错误响应中接收大型响应标头?

如何从Chrome拦截Web URL并将标头添加到请求中?

在Firefox中,如何查看HTTP请求标头?(在Web控制台中的何处?)