0

これは仕様によるものか、私が行っているか行っていないことである可能性があります。

AccountControllerがAuthorize属性を使用しているMVC4アプリケーションがあります。ユーザーがログインページを表示しているとき、ログイン後に使用されるTeller Issue Dateがあります。正常に機能しているNameフィールドでchangeイベントをキャプチャしようとしており、Jquery関数を起動して取得します。発行日。

JQueryAjax関数は次のとおりです。

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のものを無効にしている場合、この関数はそのまま機能し、適切な発行日を返します。ただし、承認を有効にしている場合、GetIssueDateアクションは実行されないようです。そして、ログインページのHTMLを取得します。

このアクションに[AllowAnonymous]属性がありますが、アプリケーションはJquery関数から呼び出されたときにこれを無視しているようであり、起動を許可していないようです。

これを回避する方法はありますか、それとも私がやろうとしていることを行う別の方法はありますか?

ありがとう。

4

1 に答える 1

0

web.configを使用して認証を制御しているようです。これは、ASP.NETMVCアプリケーションで実行する必要があることではありません。ASP.NET MVCでは、[Authorize]属性を使用して、承認が必要なコントローラー/アクションを装飾します。そしてそれに対応するもの:[AllowAnonymous]属性。

したがって<authorization><deny users="?" /></authorization>、web.configからすべてのものを削除し、Webサイト内のすべてのアクションで、で装飾されたものを除いて認証を要求する場合は、属性をグローバルアクションフィルターとして[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 に答える