2016-01-29 3 views
-1

В моем проекте C# у меня есть 2 конечных точки: «Start.ashx» и «Query.ashx». И когда я начинаю свой проект, я могу ударить обе конечные точки, как «http://localhost/site/start.ashx?text=abc» и «http://localhost/site/Query.asxh?text=abc»Сделайте запрос Http от ashx к другому ashx

Мой вопрос в моем start.ashx, как я могу создать веб-запрос на query.ashx?

Одна вещь, которую я могу придумать, делает: Но я думаю, что лучше не поставить localhost в мою просьбу.

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

Есть ли лучший способ?

спасибо.

+6

Зачем вам нужен веб-запрос? Если он находится в одном проекте, вызовите тот же код приложения. –

ответ

0

С помощью HttpContext вы можете получить Url от объекта Request и использовать его для создания своего WebRequest URL.

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, чтобы получить данные

0

Типичный способ сделать это, чтобы создать еще один класс, который содержит " мясо "кода запроса, а затем вызвать его в обоих местах;

// 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...); 
}  

Таким образом, любая часть вашего приложения может выполнять запросы, с небольшим количеством коды, без необходимости делать другой веб-запрос, который стоит дорого, сделав вызов стандартной функции.

Смежные вопросы