Как назначить PageData и UrlData в пользовательском обработчике маршрутов? - PullRequest
0 голосов
/ 26 февраля 2012

Как назначить свойства UrlData и PageData в WebPage или WebPageBase? Я пытаюсь написать собственный обработчик маршрута, и он говорит, что свойства только для чтения. Вот что я пытаюсь сделать:

using System;
using System.Collections.Generic;
using System.Web;
using System.Web.Routing;
using System.Web.WebPages;

/// <summary>
/// Summary description for CustomRazorRouteHandler
/// </summary>
public class CustomRazorRouteHandler : IRouteHandler
{
    public string VirtualPath { get; set; }

    public CustomRazorRouteHandler(string virtualPath)
    {
        this.VirtualPath = virtualPath;
    }

    public IHttpHandler GetHttpHandler(RequestContext requestContext)
    {
        var page = WebPage.CreateInstanceFromVirtualPath(VirtualPath);
        foreach (var item in requestContext.RouteData.Values)
        {
            page.PageData[item.Key] = item.Value;       // Null reference exception
            page.UrlData.Add(item.Value.ToString());    // Read-only error
        }

        var handler = WebPageHttpHandler.CreateFromVirtualPath(VirtualPath);
        return handler;
    }
}

Веб-приложение предназначено для среднего доверия, поэтому Reflection на самом деле не вариант.

1 Ответ

0 голосов
/ 01 марта 2012

Кажется, что нет способа назначить PageData и UrlData без отражения, потому что списки помечены как доступные только для чтения. Моя работа заключается в том, чтобы создать пару помощников, которые сохраняют URL-адреса в HttpContext и читают их обратно.

...