首页 > 解决方案 > Web 配置中的 Aspx 授权不适用于 Web 方法

问题描述

我在位于 Subscription 文件夹中的页面 Index.aspx 中有一个 web 方法。在这个文件夹中,我添加了这个 web.config 文件:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.web>
    <authorization>
       
      <deny users="?" />
    </authorization>
  </system.web>
</configuration>

现在我有一个对 web 方法的 ajax 调用。当用户未登录时,我希望 ajax 调用无法命中该方法并返回错误。实际上,web 方法没有按预期命中(访问被拒绝),但 ajax 调用无论如何都会返回成功。

这是我的脚本:

function Subscribe(topicId) {

    $.ajax({
        url: '<%= ResolveUrl("~/Subscription/Index.aspx/Subscribe") %>',

    contentType: "application/json",
    method: "POST",
    data: JSON.stringify({ topicId: topicId }),
    success: function () {
        // alert("Subscribed to topic " + topicId);
        var a = document.getElementById("subscription:" + topicId);
        a.href = "Javascript:Unsubscribe(" + topicId + ")";
        var img = document.getElementById("subImg:" + topicId);
        img.alt = "Unsubscribe";
        img.title = "Unsubscribe";
        img.src = img.src.replace("icon_subscribe.gif", "icon_unsubscribe.gif");
    },
    error: function () { alert("You must login to subscribe!"); }
});

这是我的网络方法:

 [WebMethod]
    public static void Subscribe(long topicId)
    {
        var dbContext = HttpContext.Current.GetOwinContext().Get<ApplicationDbContext>();
        var user = dbContext.Users.Where(u => u.UserName == HttpContext.Current.User.Identity.Name).FirstOrDefault();
        if (dbContext.Subscriptions.Where(s => s.TopicId == topicId && s.UserId == user.Id).FirstOrDefault() == null)
        {
            var subscription = new Subscription
            {
                TopicId = topicId,
                UserId = user.Id
            };
            dbContext.Subscriptions.Add(subscription);
            dbContext.SaveChanges();
        }
        
    }

标签: asp.netajaxauthorizationwebmethod

解决方案


推荐阅读