我正在构建一个应用程序,用于在推广节目或本地活动时自动创建媒体工具包的过程,并且我遇到了一些奇怪的事情。
在我的申请中,我有两个网络表单~/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.cs
在Page_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
,导致错误检查失效。
我很困惑为什么它可以在一个页面而不是另一个页面上工作。你有什么想法吗?