路径中的非法字符取决于User-Agent?

时间:2015-11-13 14:20:23

标签: http asp.net-web-api fiddler user-agent

我有两个相同的ASP.NET调用,唯一的区别是User-Agent。我用Fiddler来重现这个问题。

HTTP请求行是:

PUT http://localhost/API/es/us/havana/club/tickets/JiWOUUMxukGVWwVXQnjgfw%7C%7C214 HTTP/1.1

适用于:

User-Agent: Mozilla/5.0 (Linux; Android 4.3; Nexus 10 Build/JSS15Q) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/42.0.2307.2 Safari/537.36

失败:

User-Agent: Mozilla/5.0 (iPhone; CPU iPhone OS 8_0 like Mac OS X) AppleWebKit/600.1.3 (KHTML, like Gecko) Version/8.0 Mobile/12A4345d Safari/600.1.4

其他一切都是100%相同。

1 个答案:

答案 0 :(得分:3)

就我而言,根本原因是MVC的MultipleViews和DisplayMode提供者。这允许MVC应用程序神奇地获取特定于设备的视图;例如 custom.cshtml customer.mobile.cshtml

本文对功能有一个很好的解释,以及如何关闭它的详细信息: https://msdn.microsoft.com/en-us/magazine/dn342866.aspx

我通过将Microsoft.AspNet.WebPages包添加到我的项目并在我的启动中添加对此代码的调用(global.asax中的application_start或者如果使用OWIN,使用带有OwinStartup属性的方法)来修复此问题:

public static void RegisterDisplayModes()
{
    // MVC has handy helper to find device-specfic views. Ain't no body got     time for that.
    dynamic modeDesktop = new DefaultDisplayMode("") { ContextCondition = (c => { return true; }) };
    dynamic displayModes = DisplayModeProvider.Instance.Modes;
    displayModes.Clear();
    displayModes.Add(modeDesktop);
}