0
说例如我有一个通用的处理程序 - 〜/ handler.ashx - 通过重写处理请求到一个URL,https://www.somedomain.com/foo/bar并吐出一种格式的XML响应,我可以有相同的处理程序响应/ bar/foo以另一种xml格式?我可以使用通用处理程序来根据url路径不同地处理请求吗?
说例如我有一个通用的处理程序 - 〜/ handler.ashx - 通过重写处理请求到一个URL,https://www.somedomain.com/foo/bar并吐出一种格式的XML响应,我可以有相同的处理程序响应/ bar/foo以另一种xml格式?我可以使用通用处理程序来根据url路径不同地处理请求吗?
是的。通用处理程序完全可以自由生成任何想要的响应。提示的名称是:“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?
我在c#上很新,我正在使用的web应用程序使用web表单。我的参考点是一些旧的代码。 –