我正在使用ASP.Net MVC.这是来自名为Course的控制器的代码片段:
public ActionResult List(int id)
{
var viewmodel.ShowUrl = Url.Action("Show", "Course");
...
}
public ActionResult Show(int id)
{
...
}
Run Code Online (Sandbox Code Playgroud)
viewmodel.ShowUrl获取"id"参数的值.所以viewmodel.ShowUrl变为"/ Course/Show/151"(id的值为151); 我希望能够根据用户交互在客户端上设置id部分.我希望viewmodel.ShowUrl的值为"/ Course/Show".
这对我来说似乎是个错误.我没告诉Url.Action包含id值.它正在独立完成.如果我想设置id值,那么我会做这样的事情:
var viewmodel.ShowUrl = Url.Action("Show", "Course", new {id = somevalue});
Run Code Online (Sandbox Code Playgroud)
那么,你如何阻止MVC添加id值?我可以将viewmodel.ShowUrl硬编码为"/ Course/Show",但这似乎是一个kludgy解决方案.谢谢.
使用 MVC5 我[AllowHtml]在特定模型属性上使用以允许将 HTML 发布到服务器。
在代码的某些地方,我想像这样访问请求参数:
string wlid = HttpContext.Current.Request.Params["wlid"];
Run Code Online (Sandbox Code Playgroud)
但这会失败,HttpRequestValidationException如果请求中包含任何 HTML,即使模型属性用[AllowHtml].
有没有办法在HttpContext.Current.Request.Params["wlid"]不完全禁用请求验证的情况下访问?
也许禁用请求验证,访问 Request.Params 然后立即再次启用它?
我正在尝试编写基于策略的授权处理程序.处理程序的业务逻辑需要使用id通过默认路由传递的当前请求的记录.
[Authorize(Roles = "TaskAdmin", Policy = "RecordOwner")]
public IActionResult Index(int id) // <-- Need this id
{
// <snip>
return View();
}
Run Code Online (Sandbox Code Playgroud)
这是我需要访问id路由值的类.
public class RecordOwnerHandler : AuthorizationHandler<RecordOwnerRequirement>
{
private readonly ApplicationDbContext dbContext;
public RecordOwnerHandler(ApplicationDbContext dbContext)
{
this.dbContext = dbContext ?? throw new ArgumentNullException(nameof(dbContext));
}
protected override Task HandleRequirementAsync(AuthorizationHandlerContext context, RecordOwnerRequirement requirement)
{
if (IsUserAuthorized(context))
{
context.Succeed(requirement);
}
//TODO: Use the following if targeting a version of
//.NET Framework older than 4.6:
// …Run Code Online (Sandbox Code Playgroud) c# asp.net-mvc dependency-injection asp.net-core asp.net-core-2.0