如何使用asp.net在Web服务中获取所请求的URL?

时间:2010-11-24 08:33:02

标签: c# asp.net web-services

我正在编写一个WebService,想要找出客户端用来调用我的WebMethod的URL。

Ok ..我会详细解释..

假设我有一个webservice(http://myWebservice/HashGenerator/HashValidator.asmx) 如下

[WebMethod]
public string ValidateCode(string sCode)
{
  //need to check requested url here.The call will be coming from different sites
  //For example www.abc.com/accesscode.aspx
}

请给我一个解决方案。

5 个答案:

答案 0 :(得分:18)

如果您使用.asmx网络服务并需要获取当前网址,可以尝试以下网址。

HttpContext.Current.Request.Url

答案 1 :(得分:5)

你的问题不是很清楚。如果您尝试获取调用Web服务的ASPX页面的URL,则除非将其作为参数传递给Web方法或某些自定义HTTP标头,否则无法执行此操作。这是一个电话的例子:

var proxy = new YourWebServiceProxy();
string currentUrl = HttpContext.Current.Request.Url.ToString();
proxy.ValidateCode("some code", currentUrl);

,您的网络服务方法现在如下所示:

[WebMethod]
public string ValidateCode(string sCode, string callerUrl)
{
    ...
}

答案 2 :(得分:5)

要获取客户对当前网站的预览请求的信息,您可以使用UrlReferrer,如下所示:

//To get the Absolute path of the URI use this
string myPreviousAbsolutePath = Page.Request.UrlReferrer.AbsolutePath;

//To get the Path and Query of the URI use this
string myPreviousPathAndQuery = Page.Request.UrlReferrer.PathAndQuery;

答案 3 :(得分:1)

编辑:我刚刚意识到我正在做的事实上是多余的,因为ajax请求已经包含一个名为Referer的头。我将保留以下代码,因为如果您想传递自定义标头然后在服务器上访问它,它仍然有效。

HttpContext.Current.Handler //This is null when using a web service

我的工作是为所有Web服务调用添加自定义标头(使用Jquery .ajax)。标题包含调用页面的URL:

$.ajaxSetup({
    headers: { 'CurrentUrl': '' + document.URL + '' }
});

然后在服务器上获取Web方法内的自定义标头:

HttpContext.Current.Request.Headers["CurrentUrl"]

我想要调用者页面的URL的主要原因是我使用查询字符串参数进行调试。 下面的代码将为您提供调用Web服务的页面中的所有查询字符串参数。

HttpUtility.ParseQueryString(new Uri(HttpContext.Current.Request.Headers["CurrentUrl"]).Query)

答案 4 :(得分:0)

你需要这个:

[WebMethod]
public static string mywebmethod()
{
string parameters =  HttpContext.Current.Request.UrlReferrer.PathAndQuery.ToString();
return parameters
}