我一直在Extending Identity Accounts and Implementing Roles上关注本教程。我没有实现一些我不需要的删除方法,我将ApplicationUser.userName属性设置为电子邮件地址。这些是我项目的限制。
除用户版和角色分配外,一切正常。
一旦我加载了AccountController Myhost / Account的索引,它就显示了这个
但每当我尝试点击“编辑”或“角色”链接时,它会像这样奇怪地崩溃。 MYHOST /帐户/编辑/用户名%40gmail.com
我刚刚意识到这个系统是西班牙语,所以我在这里翻译错误。 错误HTTP 404.0 - 不是FOund 您查找的资源已被删除,名称已更改或暂时无法使用。
原因 指定的目录或文件不在服务器上 url地址有类型错误 过滤器,自定义模块,URLScan,限制文件访问
你可以尝试什么 在Web服务器上创建内容 检查浏览器上的URL 检查错误调用的注册表,以查看哪个模块调用SetStatus。要获得更多信息,请单击此处(http://go.microsoft.com/fwlink/?LinkID=66439)
错误提取信息
我只是贴上标签。
模块 通知 控制器。 StatisFile(这不是我网站上的控制器) 错误代码 请求网址 物理通路 会话启动方法 会话启动用户 呼叫目录
错误结束
然而,urland上的问题是由url中的@符号引起的。如果我将网址重写为Myhost / Account / Edit?username = username%40gmail.com,则正确加载编辑表单。
如何强制参数作为查询字符串参数?或者,有没有办法让服务器以标准方式理解邮件地址?
调用的方法是
[Authorize(Roles = "Admin")]
public ActionResult Edit(string userName, ManageMessageId? Message = null)
{
var db = new ApplicationDbContext();
var user = db.Users.First(u => u.UserName == userName);
var model = new EditUserViewModel(user);
ViewBag.MessageId = Message;
return View(model);
}
UPDATE 正如您在评论中提到的,这是索引视图
@model IEnumerable<CAEWebSite.Models.EditUserViewModel>
@{
ViewBag.Title = "Index";
}
<h2>Usuarios</h2>
<p>
@Html.ActionLink("Nuevo usuario", "Register")
</p>
<table class="table">
<tr>
<th>
@Html.DisplayNameFor(model => model.UserName)
</th>
<th>
@Html.DisplayNameFor(model => model.FirstName)
</th>
<th>
@Html.DisplayNameFor(model => model.MiddleName)
</th>
<th>
@Html.DisplayNameFor(model => model.LastName)
</th>
<th>
@Html.DisplayNameFor(model => model.SecondLastName)
</th>
<th>
@Html.DisplayNameFor(model => model.Email)
</th>
<th></th>
</tr>
@foreach (var item in Model)
{
<tr>
<td>
@Html.DisplayFor(modelItem => item.UserName)
</td>
<td>
@Html.DisplayFor(modelItem => item.FirstName)
</td>
<td>
@Html.DisplayFor(modelItem => item.MiddleName)
</td>
<td>
@Html.DisplayFor(modelItem => item.LastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.SecondLastName)
</td>
<td>
@Html.DisplayFor(modelItem => item.Email)
</td>
<td>
@Html.ActionLink("Editar", "Edit", new { id = item.UserName }) |
@Html.ActionLink("Roles", "UserRoles", new { id = item.UserName }) |
@*@Html.ActionLink("Delete", "Delete", new { /* id=item.PrimaryKey */ })*@
</td>
</tr>
}
</table>
更新2
这是我的RouteConfig类,就像VS生成它一样
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
答案 0 :(得分:0)
如果您使用标准路由设置:尝试更改
public ActionResult Edit(string userName, ManageMessageId? Message = null)
为:
public ActionResult Edit(string id, ManageMessageId? Message = null)
看它是否有效。如果是这样,它现在失败的原因是路由需要一个名为id的参数。