Trying to get the user-agent from request in asp.net web api self host

╄→гoц情女王★ 提交于 2019-12-20 10:59:10

问题


I'm trying to get the user-agent in a web api self host and I'm either doing it wrong, or the web api itself is altering the user agent string.

I've tried using several methods to the get the string and they all return the same results, instead of the excepted "Mozilla/5.0 (Windows NT 6.2; WOW64) AppleWebKit/537.31 (KHTML, like Gecko) Chrome/26.0.1410.28 Safari/537.31", I only get "Mozilla/5.0".

I've tried:

var header = request.Headers.SingleOrDefault(h => h.Key == "User-Agent").Value.First();

var header = request.Headers.UserAgent.SingleOrDefault().Product.ToString();

var header = request.Headers.GetValues("User-Agent").FirstOrDefault();

Am I doing this wrong, it's self host so I don't have a context to work with.


回答1:


The absolutely simplest way to get the full user-agent from inside a WebAPI-controller is by doing this:

var userAgent = Request.Headers.UserAgent.ToString();

It gives exactly the same result as doing the manual step like this:

// var headers = request.Headers.GetValues("User-Agent");
// var userAgent = string.Join(" ", headers);



回答2:


.NET Core 2.0(+)

As Simple as Request.Headers["User-Agent"] (returns as string) ;)




回答3:


Oops, figured it out, answering it myself in case anyone else runs into this. Apparently the user-agent gets chopped up.

This gives me the full user-agent:

// Default empty user agent.
String userAgent = "";

// Get user agent.
if (Request.Headers.Contains("User-Agent"))
{
    var headers = request.Headers.GetValues("User-Agent");

    StringBuilder sb = new StringBuilder();

    foreach (var header in headers)
    {
        sb.Append(header);

        // Re-add spaces stripped when user agent string was split up.
        sb.Append(" ");
    }

    userAgent = sb.ToString().Trim();
}



回答4:


var context = new HttpContextWrapper(HttpContext.Current);
HttpRequestBase request = context.Request;
var browserdetail = request.UserAgent;

This worked for me if you want only browser name then simply write:

var browserdetail = request.browser

And if you want clients ip address then simply do:

var browserdetail = request.hostaddress and use it for generating token key for authenticaton.




回答5:


The answer is simple try the following. It's shorter and less likely to break.

String userAgent;
userAgent = Request.UserAgent;

It will give you a string similar to this one.

Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)

Documentation: http://msdn.microsoft.com/en-us/library/system.web.httprequest.useragent.aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-2



来源:https://stackoverflow.com/questions/15309304/trying-to-get-the-user-agent-from-request-in-asp-net-web-api-self-host

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!