【发布时间】:2016-10-11 15:16:44
【问题描述】:
在 .NET 4.5 中,如果我在 RouteData.Values 的 RouteValueDictionary 中添加任何内容,我可以通过将其添加为控制器的参数来在控制器中解决此问题,但这似乎在 .NET Core 中不起作用。
这是我的 IRouter 的 RouteAsync 方法:
public async Task RouteAsync(RouteContext context)
{
if (context == null) throw new ArgumentNullException(nameof(context));
var model = GetMyModel();
if (model == null)
{
await _target.RouteAsync(context);
return;
}
context.RouteData.Values["mymodel"] = model;
var routeValues = new RouteValueDictionary
{
{"controller", pageController.Name.Replace("Controller", string.Empty)},
{"action", "Index"},
{"mymodel", model }
};
var tokenValues = new RouteValueDictionary
{
{"mymodel", model }
};
// Set our values to the route data.
// Don't do it when creating the snapshot as we'd like them to be there after the restore as well.
foreach (var tokenValueKey in tokenValues.Keys)
{
context.RouteData.DataTokens[tokenValueKey] = tokenValues[tokenValueKey];
}
foreach (var routeValueKey in routeValues.Keys)
{
context.RouteData.Values[routeValueKey] = routeValues[routeValueKey];
}
// This takes a snapshot of the route data before it is routed again
var routeDataSnapshot = context.RouteData.PushState(_target, routeValues, tokenValues);
try
{
await _target.RouteAsync(context);
}
finally
{
// Restore snapshot
routeDataSnapshot.Restore();
}
}
在这之后,实际上调用了我的控制器,但参数 mymodel 只是一个默认值,而不是我在路由器中设置的值。如果我查看 RouteData.Values 键“mymodel”就在那里并且有一个值。为什么 in-parameter 也没有设置为此?我需要为模型绑定添加一些中间件吗?
public IActionResult Index(MyModelClass mymodel)
{
return View();
}
【问题讨论】:
标签: c# asp.net-core asp.net-mvc-routing asp.net-core-mvc