0

我的 ASP.NET 网站将http://smth.com/player/1234之类的 URL 转换为对参数 id=1234 的“播放器”页面的请求

在页面上,我需要对此页面上的“GetData”方法进行网络请求。我想使用 jQuery 来完成请求。我发现的所有教程(例如http://encosia.com/using-jquery-to-directly-call-aspnet-ajax-page-methods/)建议在 'url' 参数中传递 URL/方法名称'$.ajax'

$.ajax({
  type: "POST",
  url: "PageName.aspx/MethodName", // in my case that will be ... what?
  data: "{}",
  contentType: "application/json; charset=utf-8",
  dataType: "json",
  success: function(msg) {
    // Do something interesting here.
  }
});

问题是,如果我指定“player/1234/GetData”,那么将对“player”页面进行请求,但 ASP.NET 不会调用 GetData 方法...

我是否应该在此页面上实现自定义逻辑并调用“GetData”以执行 Web 请求?如果是,我如何确定对 WebMethod 的请求已完成?

或者我应该以http://smth.com/player.aspx?Id=1234/GetData之类的方式提供“普通”网址

我可能想念什么?可能是 jquery 允许在单独的字段中指定“方法名称”吗?或者我应该配置我的网站以正确处理它?

请指教。欢迎任何想法!

4

2 回答 2

1

Budda,我在遇到同样问题时看到了您的问题。

我的解决方案,可能不是最好的,是在我的呼叫中添加一个假扩展,在我的例子中是“jq”,如下所示:

url: "<%: ResolveUrl("~/PagePath/PageName.aspx") %>/WebMethod.jq"

因为我有一条规则来删除扩展名,而另一条规则是在我需要使用的 URL 末尾添加斜杠 <%: ResolveUrl("~/PagePath/PageName.aspx") %>。这是因为当我输入我的 URL 的页面时http://hostname/PagePath/PageName/,如果我通过 ajax 调用 WebMethod,则 url 最终会像http://hostname/PagePath/PageName/PageName.aspx/WebMethod.jq.

添加此假扩展后,您必须添加新的重写规则以在最终执行之前将其删除:

<rule name="Clean Page WebMethods">
   <match url="(.*)\.jq$" />
   <action type="Rewrite" url="{R:1}" redirectType="Permanent" />
</rule>

如果您有任何其他规则,则必须使用条件跳过它们,例如,如果您使用一个来删除扩展名,则可能需要在规则的条件中添加如下内容:

<add input="{R:2}" negate="true" pattern="\.jq" />

我正在使用{R:2},因为我发现如果 URL 重写模块找到扩展名WebMethod.jq,它不会将 url 作为 url 的一部分。aspx{R:2}将适用于我的模式,但它可能会因您的规则模式而改变。

仅使用 Page WebMethod 听起来可能过于复杂,但在初始配置之后,您只需.jq在脚本中添加调用扩展。

希望这对你有帮助!

于 2013-05-14T21:40:28.420 回答
0

不知道如何解决这个问题..所以我正在向 Web 服务发出请求(URL 包含绕过 URL 重写的 .asmx)......

如果您知道如何解决原始问题 - 请告知!

于 2013-04-02T02:22:00.190 回答