我有一个方法,它返回一个IEnumerable<>使用yield return语法构建的方法:
namespace Validation
{
public class UserValidator
{
public IEnumerable<ValidationError> Validate(User user)
{
if (String.IsNullOrEmpty(user.Name))
{
yield return new ValidationError("Name", ValidationErrorType.Required);
}
[...]
yield break;
}
}
}
Run Code Online (Sandbox Code Playgroud)
如果我在方法中放置断点,我可以跨越每一行,但如果我尝试使用Watch或Immediate窗口来查看变量的值,我会收到此错误:
无法通过嵌套类型"Validation.UserValidator"访问外部类型"Validation.UserValidator.Validate"的非静态成员
有谁知道为什么会这样,我怎么能绕过它?
我有一个使用表单身份验证的MVC应用程序,我收到404错误.发生的事情是,当用户的身份验证超时时,用户恰好将表单提交给仅POST操作,并将其重定向到登录页面.登录后,他们将使用GET重定向回原始URL,这将导致404错误,因为操作仅限POST.
我有两个问题:
解决这个问题的想法是以某种方式检测被重定向到的动作是否是仅POST操作,而是重定向到主页.我该怎么做呢?
理想情况下,应用程序会记住发布的值,并通过POST将它们提交到原始URL,但我不知道如何绕过Forms身份验证来执行此操作,我怀疑这会对安全漏洞开放.这是一个好主意,如果是这样,怎么办呢?
我正在尝试从ASP.NET MVC应用程序输出到Trace.axd.我在OnActionExecuting(),OnActionExecuted(),OnResultExecuting()和OnResultExecuted()中都有跟踪,除了OnResultExecuted()之外,它们都输出到Trace.axd.
为了完整性,这里是我的代码(与OnActionX()完全相同):
protected override void OnResultExecuting(ResultExecutingContext filterContext)
{
resultStartTime = DateTime.Now;
filterContext.HttpContext.Trace.Warn("OnResultExecuting: " + actionStartTime);
base.OnResultExecuting(filterContext);
}
protected override void OnResultExecuted(ResultExecutedContext filterContext)
{
DateTime resultEndTime = DateTime.Now;
filterContext.HttpContext.Trace.Warn("OnResultExecuted: " + resultEndTime);
filterContext.HttpContext.Trace.Warn("OnResultExecuted - OnResultExecuting: " + (resultEndTime - resultStartTime).TotalSeconds);
base.OnResultExecuted(filterContext);
}
Run Code Online (Sandbox Code Playgroud)
我正在使用ELMAH,但我已禁用它,我仍然遇到问题.