http - 路径中的非法字符取决于用户代理?

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

我有两个相同的 ASP.NET 调用,唯一的区别是用户代理。我使用 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% 相同。

最佳答案

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

这篇文章很好地解释了该功能以及如何关闭它的详细信息: https://learn.microsoft.com/en-us/archive/msdn-magazine/2013/august/cutting-edge-creating-mobile-optimized-views-in-asp-net-mvc-4-part-2-using-wurfl

我通过将 Microsoft.AspNet.WebPages 包添加到我的项目并在我的启动中添加对此代码的调用来修复此问题(global.asax 中的 application_start 或如果使用 OWIN,方法 decordated w/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);
}

关于http - 路径中的非法字符取决于用户代理?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33694842/

相关文章:

c# - ASP.NET Web Api 返回 XML 和获取 XML

asp.net-web-api - 在 Meteor 中调用外部 Web API 有多容易?

asp.net - 在条件 GET 请求中删除 Cookie

api - 为什么 Postman 和 Fiddler 从不生成预检请求

ruby - 如何连接到使用 LDAP 进行身份验证的 HTTP Rest API

django http 直接响应html

json - golang - 从 http 请求返回 json 字符串的库/包

c# - 为 api 资源管理器文档动态忽略 Controller 上的 WebAPI 方法

android - 捕获从 Android 模拟器到本地主机的流量?

api - Angular 2 Observable 发射/错误函数在调用一次错误函数后被忽略