c# – 在ASMX Web服务中区分客户端应用程序和浏览器?
这是
Choosing a Connection String based on kind of request的后续行动,我没有得到答案,而我认为有效的不是.
我有一个web服务需要根据用户从浏览器或客户端应用程序调用它来选择特定的连接字符串. 我试过了: HttpContext.Current != null? ConnectionStrings["Website"].ConnectionString : ConnectionStrings["Client"].ConnectionString 但我意识到,即使我正在使用客户端应用程序,也有一些HttpContext(如果有人可以解释为什么它会很棒),但Request下的Browser字段是“Unknown”.那么,我试过: if ( HttpContext.Current != null ) { if ( HttpContext.Current.Request.Browser != "Unknown" ) { //browser connection string here } else //client app connection string here } else //client app connection string here 这在调试时会产生奇迹,但在测试环境中,即使从客户端应用程序调用,它仍指向浏览器连接字符串,就好像在某些时候浏览器不是“未知”… 有没有更简单/更简单的方法来做到这一点?我这样做的方式似乎很难看. 我现在非常绝望,因为我不知道为什么会这样. 解决方法
而不是检测和打开浏览器类型,请考虑以下两个建议:
添加自定义请求标头 在各种呼叫者中,在Http请求中定义新的自定义标头. HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url); webRequest.Headers.Add("CallerType","ClientApp"); // "Browser",etc. 然后,您确切地知道客户端正在调用什么类型的客户端.这很难出错,也不会被欺骗/弄错. 在QueryString中包含调用者类型 myService.asmx?BrowserType=1 在.asmx webmethod中添加一个简单的新查询字符串参数.这在受控环境中的工作方式相同,但如果其他用户/开发人员弄错了,或者预期值不正确,则必须采取其他措施来纠正/处理. 两者都允许您轻松确定传入值的connString.也许缺少修饰符/标题,你可以假设一个默认值.您的示例问题有2个基本结果,建议的解决方案很容易扩展(浏览器,客户端应用程序,iPhone,whathaveyou). (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |