这是 Choosing a Connection String based on kind of request 的后续行动我没有得到答案,而我认为有效的方法却没有。
我有一个网络服务需要根据用户从浏览器或客户端应用程序调用它来选择特定的连接字符串。
我试过:
HttpContext.Current != null? ConnectionStrings["Website"].ConnectionString : ConnectionStrings["Client"].ConnectionString
但意识到在某些时候即使我正在使用客户端应用程序,也有一些 HttpContext(如果有人能解释为什么它会很棒)但是 下的
是Browser
字段请求“未知”
。所以,然后我尝试了:
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
这在调试时产生了奇迹,但在测试环境中它仍然指向浏览器连接字符串,即使是从客户端应用程序调用时,就好像在某些时候浏览器不是“未知”......
有没有更容易/更简单的方法来做到这一点?我这样做的方式看起来真的很难看。
我现在很绝望,因为我不知道为什么会这样..
最佳答案
与其检测和切换浏览器类型,不如考虑以下两个建议:
添加自定义请求 header
在您的各种调用者中,在您的 Http 请求中定义一个新的自定义 header 。
HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create(url);
webRequest.Headers.Add("CallerType", "ClientApp"); // "Browser", etc.
然后您就可以准确可靠地知道调用的是哪种类型的客户端。这很难出错,也不会被欺骗/弄错。
在查询字符串中包含调用者类型
myService.asmx?BrowserType=1
向您的 .asmx 网络方法添加一个简单的新查询字符串参数。这在受控环境中同样有效,但如果其他用户/开发人员弄错了,或者使预期值变形,则您必须采取其他措施来纠正/处理。
两者都允许您轻松确定传入值的 connString。也许缺少修饰符/标题,您可以假设默认值。您的示例问题有 2 个基本结果,并且任何一个建议的解决方案都将很容易扩展(浏览器、客户端应用程序、iPhone,等等)。
关于c# - 区分 ASMX Web 服务中的客户端应用程序和浏览器?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3450337/