在我的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");
有更好的方法吗?
谢谢。
答案 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请求。