Asp.net 带有自定义处理程序的PageMethod
我有一个基于页面的web方法,它使用[WebMethod]运行良好,即Asp.net 带有自定义处理程序的PageMethod,asp.net,Asp.net,我有一个基于页面的web方法,它使用[WebMethod]运行良好,即 [WebMethod] public static void DoSomethingOnTheServer() { } 我还有一个自定义页面处理程序,使SEO友好的URL成为可能 e、 g => 我正在使用ProcessRequest处理程序中的Server.Transfer来实现这一点。这一切都很好。此外,当用户请求URL时,my page方法也可以正常工作,例如: 但是,当用户请求自定义处理的URL时,即 客户端报
[WebMethod]
public static void DoSomethingOnTheServer()
{
}
我还有一个自定义页面处理程序,使SEO友好的URL成为可能
e、 g
=>
我正在使用ProcessRequest处理程序中的Server.Transfer来实现这一点。这一切都很好。此外,当用户请求URL时,my page方法也可以正常工作,例如:
但是,当用户请求自定义处理的URL时,即
客户端报告PageMethod已成功完成,但根本没有调用它
我猜它与我的自定义处理程序有关,因此我对其进行了修改,以包含PathInfo:
public void ProcessRequest(HttpContext context)
{
// ... (code to determine id) ...
// Transfer to the required page
string actualPath =
"~/page.aspx" + context.Request.PathInfo + "?id=" + determinedId;
context.Server.Transfer(actualPath);
}
因此,如果调用PageMethod,将导致:
我想知道这是否是调用PageMethod的正确语法
尝试服务器传输报告时:
在服务器上执行/MySite/page.aspx/dosomething的子请求时出错
我已经尝试过HttpContext.RewritePath,但不确定如何让它执行请求
这似乎不起作用,有什么想法吗?我认为您必须使用“重写url”方法,避免现在的方式 为什么不试试这个 从这个想法开始学习,也许把你的想法变成这样 Server.Transfer不是使url友好的方法,在我看来,您必须避免使用它,并且只在非常特殊的情况下使用它 在Server.Transfer中,实际停止某个页面的执行,并开始执行另一个页面。这是调用的代码。事实上,我认为这不是运行每个页面的好方法。我不太确定在一些困难的情况下还会发生什么,比如在ResponceWrite、MSAjax、控件更改、多线程页面等上会发生什么。。。为什么每页都要打两次电话?您使程序每次初始化并运行2个页面,而不是仅运行一个页面。第一个被调用,以取消,然后第二个被运行。同样从我这里看到的,他们不允许回调 仅在某些特殊事件中使用转接,而不是在每次通话中使用转接
public void Transfer(string path, bool preserveForm)
{
Page handler = this._context.Handler as Page;
if ((handler != null) && handler.IsCallback)
{
throw new ApplicationException(SR.GetString("Transfer_not_allowed_in_callback"));
}
this.Execute(path, null, preserveForm);
this._context.Response.End();
}
例如,我使用了Transfer,这种方式:我有一个有多个名称的网站,我在url上检查webname。如果一些人没有键入正确的url,那么我不会在正常页面上发送他们,但首先我会进行服务器传输(在url/路径上保持相同的名称)以通知他该错误,然后如果他愿意,单击转到正确的url
但是包含消息的页面非常简单
所以我使用Transfer,只是为了某种错误,我喜欢保持相同的url/路径,并通知他该错误
对于所有其余的部分,我使用路径重写,这是出于这个原因
Url重写也用于post
请参阅本页
然后查看html页面的源代码,并查看我在表单中调用的内容…
你看,我又叫同一页了。首先想到的是,我已经改变了形式的网址也!,第二个是我的程序在url重写上做的帖子
我调任的例子
请看这两页
第二个是服务器传输,发生在与第一个相同的代码上。
第二个url,仅在极少数情况下使用,我不会失去那个用户,也不会显示相同的站点
希望这对您有所帮助。最后,将PageMethod更改为ASMX ScriptService是最简单的解决方案,与我现有的自定义处理程序配合使用。谢谢您的消息。我在自定义处理程序中使用Server.Transfer,因此我不确定服务器是否每次初始化并运行2个页面。因为它是在自定义处理程序中完成的,所以只会加载1个页面。但是,将处理两个请求,但只加载目标页。i、 e.URL被处理两次,但这是不可避免的。