2017-09-12 32 views

回答

2

是的。通用处理程序完全可以自由生成任何想要的响应。提示的名称是:“Handler”(与“Filter”或“Module”相对,如IHttpModule vs IHttpHandler)。

您将需要自己访问和解析原始URL,当然,因为泛型处理程序早于ASP.NET路由。你可以通过HTTP_X_REWRITE_URL服务器变量得到它(我相信Request.RawUrl也包含它,但我不知道这是否总是保证)。

static readonly Regex _routeX = new Regex("foo/(.+)", RegexOptions.Compiled); 
static readonly Regex _routeY = new Regex("baz/(.+)"/qux, RegexOptions.Compiled); 

public void HandleRequest(HttpContext context) 
{ 
    if(_routeX.IsMatch(context.Request.RawUrl)) 
    { 
     context.Response.Write("<xml><myObject>foo</myObject></xml>"); 
    } 
    else if(_routeY.IsMatch(context.Request.RawUrl)) 
    { 
     context.Response.Write("<anotherXmlFile>baz</anotherXmlFile>"); 
    } 
} 

这就是说 - 这可能是一个糟糕的设计,因为处理程序负责两个不同的业务任务。有没有一个原因,你不能用单独的处理程序 - 甚至是ASP.NET MVC或ASP.NET Web API?

+0

我在c#上很新,我正在使用的web应用程序使用web表单。我的参考点是一些旧的代码。 –

相关问题