RouteData值在一个页面上有效,但在另一个页面上为空

时间:2018-03-14 16:10:41

标签: c# asp.net webforms asp.net-4.5 asp.net-routing

我正在构建一个应用程序,用于在推广节目或本地活动时自动创建媒体工具包的过程,并且我遇到了一些奇怪的事情。

在我的申请中,我有两个网络表单~/KitInfo.aspx~/Photo.aspx

在我~\App_Start\RouteConfig.cs我有以下锅炉铭牌代码。

public static class RouteConfig
{
    public static void RegisterRoutes(RouteCollection routes)
    {
        var settings = new FriendlyUrlSettings();
        settings.AutoRedirectMode = RedirectMode.Permanent;
        routes.EnableFriendlyUrls(settings);
    }
}

在我的Global.asax.cs中,我注册了以下路线:

void Application_Start(object sender, EventArgs e)
{
    // Code that runs on application startup
    RouteConfig.RegisterRoutes(RouteTable.Routes);
    BundleConfig.RegisterBundles(BundleTable.Bundles);

    // Add Custom Routes
    RegisterCustomRoutes(RouteTable.Routes);
}

private void RegisterCustomRoutes(RouteCollection routes)
{
    routes.MapPageRoute("MediaKitInforRoute", "Kit/{show}", "~/KitInfo.aspx");
    routes.MapPageRoute("PhotoRoute", "Photo/{show}/{photo}/{medium}/{size}/{download}", "~/Photo.aspx");
}

我有一个实用程序方法来访问路径数据值:

public static T GetRouteData<T>(string segmentName, T defaultValue)
{
    var result = defaultValue;

    try
    {
        var textValue = HttpContext.Current.Request.RequestContext.RouteData.Values[segmentName].ToString();

        result = (T)Convert.ChangeType(textValue, typeof(T));
    }
    catch (Exception)
    {
        // Do nothing
    }

    return result;
}

KitInfo.aspx.cs包含以下代码:

protected void Page_Load(object sender, EventArgs e)
{
    var show = Utility.GetRouteData("show", string.Empty);
    var path = Server.MapPath("~/KitArchives/" + show);
    var kitPath = Path.Combine(path, show + ".kit");

    var kit = Kit.Load(kitPath);

    KitName.Text = kit.ShowTitle;
}

Photo.aspx.csPage_Load

中包含此代码
protected void Page_Load(object sender, EventArgs e)
{
    var show = Utility.GetRouteData("show", string.Empty);
    var photo = Utility.GetRouteData("photo", string.Empty);
    var medium = Utility.GetRouteData("medium", string.Empty);
    var maxSize = Utility.GetRouteData("size", -1);
    var download = Utility.GetRouteData("download", 1);

    if (show.Length == 0)
    {
        SendImageNotFound();
        return;
    }

导航至http://mediakits.server.com/kit/queen,该页面将成功加载展示值queen的媒体工具包。由于女王秀是我的测试工具包,任何其​​他值都会因预期结果而失败。

导航到http://mediakits.server.com/Photo/queen/ShowPoster/print/900/0失败,因为所有路由数据都为空,Utility.GetRouteData("show", string.Empty)返回默认值string.Empty,导致错误检查失效。

我很困惑为什么它可以在一个页面而不是另一个页面上工作。你有什么想法吗?

0 个答案:

没有答案