0

这可能是设计使然,也可能是我正在做或没有做的事情。

我有一个 AccountController 正在使用 Authorize 属性的 MVC 4 应用程序。当用户在登录页面上时,一旦他们登录就会使用一个出纳员发布日期。我试图在名称字段上捕获更改事件,这工作正常,并触发一个 Jquery 函数来获取发行日期。

这是 JQuery Ajax 函数:

function update_issue_date() {
var userName = $('#UserName').val();

$.ajax({
    type: 'GET',
    url: '/Account/GetIssueDate',
    async: true,
    data:
    {
        userName: userName
    },
    success: function(data) {
        $('#IssueDate').val(__format_date_for(new Date(data.issueDate)));
    }
});

在 AccountController 我有以下操作:

        [AllowAnonymous]
    public ActionResult GetIssueDate(string userName)
    {
        var issueDate = DateTime.Now.Date;

        if (userName.Length > 0)
        {
            var user = userRepo.GetUser(userName);
            //var user = user_repository.get_all().FirstOrDefault(x => x.user_name == userName);
            var currentDate = DateTime.Now.Date;

            issueDate = (user == null || user.IssueDate < currentDate) ? currentDate : user.IssueDate;
        }

        return Json(new { issueDate = issueDate.ToShortDateString() }, JsonRequestBehavior.AllowGet);
    }

这就是发生的情况,如果我在 web.config 中禁用了 Authorize 内容,则此功能按原样工作,应返回正确的发布日期。但是,如果我启用了 Authorize things,那么 GetIssueDate Action 似乎不会被触发。我得到了登录页面的 HTML。

我认为即使我在此操作上具有 [AllowAnonymous] 属性,应用程序在从 Jquery 函数调用时似乎忽略了这一点,并且不允许它触发。

有没有办法解决这个问题,或者可能有另一种方法来做我想做的事情?

谢谢。

4

1 回答 1

0

您似乎正在使用您的 web.config 来控制授权。这不是您应该在 ASP.NET MVC 应用程序中执行的操作。在 ASP.NET MVC 中,您使用该[Authorize]属性来装饰需要授权的控制器/操作。及其对应物:[AllowAnonymous]属性。

因此,从您的 web.config 中删除所有<authorization><deny users="?" /></authorization>内容,然后如果您希望网站中的所有操作都需要身份验证,除了那些用 装饰的操作,[AllowAnonymous]您可以将该[Authorize]属性注册为全局操作过滤器。这是在~/App_Start/FilterConfig.cs文件中完成的:

public class FilterConfig
{
    public static void RegisterGlobalFilters(GlobalFilterCollection filters)
    {
        filters.Add(new AuthorizeAttribute());
        filters.Add(new HandleErrorAttribute());
    }
}

当然,在 web.config 中,您需要保留authentication指示 ASP.NET 您正在使用表单身份验证的部分:

<authentication mode="Forms">
    <forms loginUrl="~/Account/Login" timeout="2880" />
</authentication> 
于 2012-07-27T05:52:51.583 回答