我开始使用ELMAH,我觉得它很棒。我在线阅读了一些文档,但现在我的应用程序没有角色/用户授权设置。
我希望能够通过访问/elmah.axd来阅读生产中的错误日志,但我不想只向所有人开放,elmah是否有任何可以让我创建密码的功能(在web.config中)并通过querystring传递它?模仿“安全”RSS源。或类似的事情....
答案 0 :(得分:10)
但是现在我的应用没有角色/用户授权设置
实际上,配置表单身份验证并不难:
<authentication mode="Forms">
<forms loginUrl="~/Account/LogOn" timeout="2880">
<credentials passwordFormat="Clear">
<user name="admin" password="secret" />
</credentials>
</forms>
</authentication>
然后保护elmah.axd
:
<location path="elmah.axd">
<system.web>
<authorization>
<deny users="?"/>
</authorization>
</system.web>
</location>
最后你可以拥有AccountController
:
public class AccountController : Controller
{
public ActionResult LogOn()
{
return View();
}
[HttpPost]
public ActionResult LogOn(string username, string password)
{
if (FormsAuthentication.Authenticate(username, password))
{
FormsAuthentication.SetAuthCookie(username, false);
return Redirect("~/elmah.axd");
}
else
{
ModelState.AddModelError("", "The user name or password provided is incorrect.");
}
return View();
}
}
和LogOn.cshtml
视图:
@Html.ValidationSummary(false)
@using (Html.BeginForm())
{
<div>
@Html.Label("username")
@Html.TextBox("username")
</div>
<div>
@Html.Label("password")
@Html.Password("password")
</div>
<p>
<input type="submit" value="Log On" />
</p>
}
现在,当匿名用户尝试访问/elmah.axd
时,他将看到登录屏幕,他需要进行身份验证才能访问它。用户名/密码组合位于web.config
。我在此示例中使用了passwordFormat="Clear"
,但您也可以使用SHA1或MD5密码。
当然,如果您不想配置身份验证,您还可以配置elmah将日志记录信息存储在XML文件或SQL数据库中,然后从面向公众的网站中完全禁用elmah.axd处理程序。然后创建另一个ASP.NET站点,只有您可以使用指向同一日志源的相同elmah配置访问该站点,然后只需导航到您的专用站点的/elmah.axd处理程序以读取您的公共站点的日志。