0

私はブログサイトに取り組んでおり、MVC3 にアップグレードしています。

私はこれをweb.configに持っています:

<add name="RssHandler" verb="*" path="rss.axd" type="Blog.Web.RSSHandler, Blog.Web"/>

したがって、url から直接 rss.axd にアクセスすると、次のように動作します。

http://mydomain/rss.axd

今、rss.axdをマップするために使用したいhttp://mydomain/RSSので、global.asaxで試しました

public static void RegisterRoutes(RouteCollection routes)
{
    routes.MapPageRoute("RSS-View", "RSS", "~/rss.axd", false);
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
    ...
}

しかし、rss.axd は Web サイト フォルダーに存在する物理ファイルではないため、404 エラーが発生しました。

過去に、私は UrlRewrite を使用してこれを行いましたが、次のように機能します。

<LookFor>~/RSS<LookFor>
<SendTo>~/rss.axd</SendTo>

それで、MVC3では、「ルート」ではなく、この「書き換え」を行う方法はありますか? リダイレクトを使用したくありません。

4

1 に答える 1

1

http ハンドラーへのルーティングに使用できる組み込みサポートはありません。

IRouteHandler1 つの可能性は、次のインスタンスを返すカスタム ルート ハンドラ ( ) を作成することRSSHandlerです。

public class RssRouteHandler : IRouteHandler
{
    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        return new Blog.Web.RSSHandler();
    }
}

最後に、このルートを登録できます:

public static void RegisterRoutes(RouteCollection routes)
{
    routes.IgnoreRoute("{resource}.axd/{*pathInfo}");

    routes.Add("RSS-View", new Route("rss", new RssRouteHandler()));

    routes.MapRoute(
        "Default",
        "{controller}/{action}/{id}",
        new { controller = "Home", action = "Index", id = UrlParameter.Optional }
    );
}

rss.axdこれで、仮想アドレスを経由しなくなりました。へのリクエストが行われると/rss、web.config に次の内容があるかのように、カスタム ルート ハンドラーを介してこのリクエストを直接処理します。

<add name="RssHandler" verb="*" path="rss" type="Blog.Web.RSSHandler, Blog.Web"/>
于 2012-07-01T06:32:41.370 に答える