我有一个ASP.Net页面,它将托管在几个不同的服务器上,我想获取页面的URL(甚至更好:托管页面的站点)作为在代码隐藏中使用的字符串.有任何想法吗?
如何在控制器中获取完整的请求URL(包括查询字符串)?是连接我的URL和表单参数还是有更好的方法.
我检查了这个问题,但它似乎不适用于MVC.
如我错了请纠正我.
一些更详细的信息:
我对我的电话SearchController.AdvancedSearch()来自一个包含大约15个可选参数的表格.由于参数的数量并且没有可能的方法(我认为)以干净的方式传递可选参数,我去了一个在控制器中处理的catchall字符串.
现在我希望我的控制器将其调用存储在面包屑组件中,以便在单击面包屑时可以获取完全相同的结果(包括所有但不多的参数).为此,我需要整个request.URL,包括查询字符串.
在Request.RawURL,request.URL等不包括在此查询字符串.事实上,目前我做了一个简单的功能.
String.Format("{0}/{1}", request.Url, request.form)
Run Code Online (Sandbox Code Playgroud)
这给了我一些奇怪的结果(如提交按钮值等),但它的工作原理.如果有关于如何减少这种丑陋黑客的建议,请告诉我们.
我知道在哪里可以找到当前请求,但我似乎无法在任何地方找到原始URL.他们都被剥夺了查询字符串,我也需要这一点.
我的控制器更新了BreadCrumb组件中的URL集合.因此它需要请求URL.你怎么建议我接受这个问题?
第一个问题!
环境
MVC,C#,AppHarbor.
问题
我正在调用openid提供程序,并根据域生成绝对回调URL.
在我的本地机器上,如果我点击,这可以正常工作 http://localhost:12345/login
Request.Url; //gives me `http://localhost:12345/callback`
Run Code Online (Sandbox Code Playgroud)
但是,在我正在部署的AppHarbor上,因为他们使用的是非标准端口,即使我在" http://sub.example.com/login "上点击它
Request.Url; //gives me http://sub.example.com:15232/callback
Run Code Online (Sandbox Code Playgroud)
这搞砸了我的回调,因为端口号不在原始源URL中!
我试过了
所有这些都给了我" http://sub.example.com:15232/callback ".
另外要清除这不是一个Realm问题,我从DotNetOpenAuth得到的错误信息是
'http://sub.example.com:14107/accounts/openidcallback' not under realm 'http://*.example.com/'.
Run Code Online (Sandbox Code Playgroud)
我不觉得我塞满了吗?
现在,我要考虑一些像hacky这样的东西
所有这些都不是100%的解决方案,但我厌倦了考虑我可能缺少的一个简单的财产.我也读过这个,但似乎没有一个可接受的答案(更多的是关于路径而不是权威).所以我把它给你们.
摘要
所以如果我有http://localhost:12345/login,我需要http://localhost:12345/callback从Request上下文中获取.
如果我有" http://sub.example.com/login ",我应该得到" http://sub.example.com/callback ",无论它在哪个端口.
谢谢!(睡觉时间,早上会回答任何问题)
我在C#项目中有一个业务逻辑层,我需要找到一种方法来生成基于运行网站的基本URL的URL.
例如,这是url:http:// localhost:56240/Management/Quiz.aspx?QuizID = 46
我需要一种方法来获取这一部分:http:// localhost:56240使用来自业务逻辑层的C#代码(意味着我不能使用Request对象或context.Request).
有没有办法做到这一点 ?