从ashx向另一个ashx发出Http请求

时间:2016-01-29 19:49:27

标签: c#

在我的C#项目中,我有2个网络端点:" Start.ashx"和" Query.ashx"。 当我开始我的项目时,我可以点击两个端点,例如' http://localhost/site/start.ashx?text=abc'和' http://localhost/site/Query.asxh?text=abc'

我的问题在于我的start.ashx,如何创建一个查询.ashx的网络请求?

我能想到的一件事是:但我认为最好不要在我的请求中使用put localhost。

WebRequest request = WebRequest.Create ("http://localhost/site/Query.ashx?text=abc"); 

有更好的方法吗?

谢谢。

2 个答案:

答案 0 :(得分:0)

通过HttpContext,您可以从Request对象获取网址,并使用该网址构建您的WebRequest网址。

public void ProcessRequest(HttpContext context)
{
    string url = context.Request.Url.AbsoluteUri;
    // ---- url ==> "http://localhost:21310/site/htmlpage.ashx"
    string baseUrl = context.Request.Url.Authority;
    // ---- baseUrl ==> "localhost:21310"
    WebRequest request = WebRequest.Create ("http://"+ baseUrl +"/site/Query.ashx?query=abc");
    // rest of the logic
}

但是,如果两个端点都在同一个项目中,那么发出http请求获取数据效率不高

答案 1 :(得分:0)

这样做的典型方法是创建另一个包含' meat'查询代码,然后在两个地方调用它;

// in QueryService.cs, you define a library for querying...
public class QueryService
{
    public DataTable PerformQuery(string searchTerm)
    {
       // your query logic goes here. Return a logical result like a DataTable, some JSON, etc.
    } 
}   

// in Query.ashx, call your query service;
public void ProcessRequest(HttpContext context)
{
    var searchTerm = context.Request.QueryString["query"];
    var results = new QueryService().PerformQuery(searchTerm);
    context.Response.Write(...results...);
}

// in Start.ashx, call your query service again;
public void ProcessRequest(HttpContext context)
{
    var searchTerm = context.QueryString["homepage"];
    var results = new QueryService().PerformQuery(searchTerm);
    context.Response.Write(...results...);
}     

通过这种方式,您的应用程序的任何部分都可以使用少量代码执行查询,而无需通过标准函数调用来进行另一个昂贵的Web请求。