I have ASP.NET MVC 4 application and I have trouble with detection of browser on server side. Client with Opera userAgent
"Mozilla/5.0 (Windows NT 6.1; WOW64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/38.0.2125.104 Safari/537.36 OPR/25.0.1614.63"
send request, but on server side browser name defined as "Chrome" and it's wrong.
var browserName = Request.Browser.Browser;
I want browserName
defined as "Opera".
I've tried to override creation of object Request.Browser
.
Solution 1:
I've created "browserCaps.config" file and added xml element for Opera into this file.
<browserCaps>
<use var="HTTP_USER_AGENT" />
...
<case match="Chrome/\d+\.\d+\.\d+.\d+\sSafari/\d+\.\d+\sOPR/(?'version'(?'major'\d+)(?'minor'\.\d+)\.\d+.\d+)">
browser=Opera
version=${version}
majorversion=${major}
minorversion=${minor}
</case>
...
</browserCaps>
It works fine but I don't like this solution because it overrides the capabilities of all browsers and I need to update it manually.
Solution 2:
I've added a file "opera.browser" to folder "App_Browsers":
<browsers>
<browser id="Opera" parentID="Chrome">
<identification>
<userAgent match="OPR/(?'version'(?'major'\d+)(\.(?'minor'\d+)?)\w*)" />
</identification>
<capabilities>
<capability name="browser" value="Opera" />
<capability name="majorversion" value="${major}" />
<capability name="minorversion" value="${minor}" />
<capability name="type" value="Opera${major}" />
<capability name="version" value="${version}" />
</capabilities>
</browser>
</browsers>
I sent first request from Opera userAgent, it worked out and browserName
defined as "Opera", but then I sent second request from Chrome userAgent and browserName
still defined as "Opera". What am I doing wrong?