C# 从全局asax获取页面的完整url
我想从global asax检索我的网站的url。此url必须完整(协议、域等)。有没有一个简单的方法 我尝试了虚拟实用性。为了解决问题,它只给出了一个相对路径。试试这个:C# 从全局asax获取页面的完整url,c#,asp.net,global-asax,C#,Asp.net,Global Asax,我想从global asax检索我的网站的url。此url必须完整(协议、域等)。有没有一个简单的方法 我尝试了虚拟实用性。为了解决问题,它只给出了一个相对路径。试试这个: HttpContext.Current.Request.Url.OriginalString 通过这种方式,您可以从全局asax访问url 另外,您可以通过调试自己完成: 使用了OriginalString,因为您需要完整的原始信息 您也可以使用不带端口的,即AbsoluteURI 多亏了罗伊,我现在才想起该怎么做
HttpContext.Current.Request.Url.OriginalString
通过这种方式,您可以从全局asax访问url
另外,您可以通过调试自己完成:
- 使用了
,因为您需要完整的原始信息OriginalString
- 您也可以使用不带端口的,即
AbsoluteURI
- 多亏了罗伊,我现在才想起该怎么做(很久没做了):
您可以通过在Global.asax和HttpApplication.Context.Request.Url中使用Application_BeginRequest方法来实现这一点。请记住,该方法将针对每个请求启动
public class Global : System.Web.HttpApplication
{
private void Application_Start(object sender, EventArgs e)
{
// Code that runs on application startup
}
void Application_BeginRequest(Object source, EventArgs e)
{
var app = (HttpApplication)source;
var uriObject = app.Context.Request.Url;
//app.Context.Request.Url.OriginalString
}
void Application_Error(object sender, EventArgs e)
{
// Code that runs on application error
}
private void RegisterRoutes(RouteCollection routes)
{
// Code that runs on register routes
}
}
在Global.asax的Application_Start方法期间无法获取URL。正如@Edwin所指出的,您可以在应用程序_BeginRequest中执行此操作,但这会激发每个请求,而不仅仅是第一个请求。如果这是一个问题,您需要设置一个初始值设定项,该初始值设定项虽然为每个请求调用,但只触发一次 这里有一篇关于这个问题的文章: 以及相关比特:
void Application_BeginRequest(Object source, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
HttpContext context = app.Context;
// Attempt to peform first request initialization
FirstRequestInitialization.Initialize(context);
}
class FirstRequestInitialization
{
private static bool s_InitializedAlready = false;
private static Object s_lock = new Object();
// Initialize only on the first request
public static void Initialize(HttpContext context)
{
if (s_InitializedAlready)
return;
lock (s_lock)
{
if (s_InitializedAlready)
return;
/* << Perform first-request initialization here >> */
s_InitializedAlready = true;
}
}
}
void应用程序\u开始请求(对象源,事件参数e)
{
HttpApplication应用程序=(HttpApplication)源;
HttpContext=app.context;
//尝试创建第一个请求初始化
初始化(上下文);
}
类FirstRequestInitialization
{
私有静态bool s_InitializedAlready=false;
私有静态对象s_lock=新对象();
//仅在第一个请求时初始化
公共静态void初始化(HttpContext上下文)
{
如果(s_已初始化)
返回;
锁(s_锁)
{
如果(s_已初始化)
返回;
/* > */
s_InitializedAlready=真;
}
}
}
它给出了一个错误,说“请求在此上下文中不可用”。@rohitara正如我所说的:使用HttpContext.Current.Request
notRequest….
@rohitara您收到错误是因为请求在应用程序的启动方法中不可用。这会将所有请求返回到所有资源,而不是浏览器中的URL
void Application_BeginRequest(Object source, EventArgs e)
{
HttpApplication app = (HttpApplication)source;
HttpContext context = app.Context;
// Attempt to peform first request initialization
FirstRequestInitialization.Initialize(context);
}
class FirstRequestInitialization
{
private static bool s_InitializedAlready = false;
private static Object s_lock = new Object();
// Initialize only on the first request
public static void Initialize(HttpContext context)
{
if (s_InitializedAlready)
return;
lock (s_lock)
{
if (s_InitializedAlready)
return;
/* << Perform first-request initialization here >> */
s_InitializedAlready = true;
}
}
}