我正在使用Fiddler调试我的MVC应用程序并查看所有的HTTP请求。
应用程序运行在http://localhost:51234/mvc上。
任何试图将Fiddler用于本地主机上的站点的人都知道存在一个问题--如果您直接访问此链接,windows将不会通过代理转发本地主机流量。您可以在几种方式中解决这个问题,比如我更喜欢使用http://ipv4.fiddler:51234/aboutus/contact的方式。这个很好用。
问题是我开始使用以下方法执行AJAX:
<% using (Html.BeginForm()) { %>如果您查看生成的源,它实际上生成了以下内容:
<form action="http://localhost:51234/aboutus/contact" method="post" onsubmit="Sys.Mvc.AsyncForm.handleSubmit(this, new Sys.UI.DomEvent(event), { insertionMode: Sys.Mvc.InsertionMode.replace, onFailure: Function.createDelegate(this, submitComments_failure), onSuccess: Function.createDelegate(this, submitComments_success) });">
糟了!
它生成了localhost而不是ipv4.fiddler:51234。因此,当然,当我运行AJAX查询时,Fiddler看不到它。
从理论上讲,使用机器名应该可以,但是如果您试图直接按下机器名WebDev.WebServer,http://win-538lf:51234/aboutus/contact就不会响应
Fiddler连接win-538 to失败。异常文本:无法建立连接,因为目标机器主动拒绝了它:fe80::81fc:8f0f:457 A:27df%12:51234
有办法解决这个问题吗?
是否可以将WebDev.WebServer配置为响应计算机名称?还是我必须创建一个虚拟目录或假主机?我不想那么做,但我想这没什么大不了的。
发布于 2009-01-28 10:35:10
所以如果你使用这个过载:
using (Ajax.BeginForm(new AjaxOptions()生成这段代码(“破坏”的代码):
<form action="http://localhost:51234/aboutus/contact" method="post" 但是,如果您这样做并包括操作名称:
using (Ajax.BeginForm("Contact", new AjaxOptions()生成以下代码:
<form action="Contact" method="post" 所以我现在不介意,但是欢迎任何其他的解决方案。
发布于 2009-01-28 08:09:17
您试过Firefox的Firebug扩展吗?它可以显示Ajax请求和响应。我在ASP.NET Ajax中使用过它。不确定MVC Ajax。
发布于 2009-01-28 08:30:53
您可以编写一个HTTPModule,它使用响应过滤器来操作HTML,替换所有"localhost:51234“字符串。
HttpResponse类有一个非常有用的属性:
public Stream Filter {get; set;}MSDN对此属性提供了有用的说明:
“获取或设置包装过滤器对象,用于在传输之前修改HTTP实体体。”
这里有一篇很好的文章,给出了一些背景知识,您可以这样做:使用.NET HttpModules和响应筛选实现(第3页)
正如在对象浏览器中所描述的,过滤器获取或设置一个包装过滤器对象,用于在传输之前修改HTTP实体体。这正是我们需要做的,以便修改HttpHandler的HTML。Filter属性声明为System.IO.Stream类型。为了将我们自己的类分配给这个filter属性,我们需要将我们的类定义为从System.IO.Stream继承:
public class PageFilter : System.IO.Stream我们现在有一个Stream,PageFilter,它可以分配给Response.Filter属性。通过将PageFilter附加到Response.Filter属性,在将数据写入响应缓冲区时,将在关键时间通知PageFilter。当然,最重要的事件是写操作。当调用此方法时,您将有机会在将数据写入响应缓冲区时修改数据。(我将其与'Response.Buffer = true‘组合在一起,以便PageFilter在一个方法调用中接收完整的响应流):
public override void Write(byte[] buffer, int offset, int count)在HttpModule中,在请求开始时(我用OnBeginRequest完成),只需通过向Response.Filter分配一个新实例来附加HttpModule:
httpCtx.Response.Filter =
new PageFilter(httpCtx.Response.Filter)另一篇文章展示了一个完整的工作示例实现。
http://aspnetresources.com/articles/HttpFilters.aspx
我希望这能帮到你!
https://stackoverflow.com/questions/486754
复制相似问题