asp.net - 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();
}
}
解决方案
推荐阅读
- vb.net - 如何在变量声明中使用 Type 类作为类型
- elixir - 是否应该将 :name 和/或 :app 添加到伞形应用程序的根 mix.exs 文件中的项目定义中?
- autohotkey - 仅当鼠标位于屏幕的某个坐标而不干扰我的键盘时,如何才能激活脚本?
- paypal - Paypal 智能按钮订阅状态
- c - 获取“来自调试器的消息:错误 1” - 用于简单项目(在 Xcode 11.0 11A420a 中)
- kubernetes-helm - 如何合并 helm chart 和 Vault Agent tempate?
- java - 如何在不更改其他字母的情况下从字体更改字体样式?
- c++ - 是否可以将给定的一组运算符简化为任意一组类?
- rust - 闭包体的生命周期与传入其中的值不匹配
- elasticsearch - Elastic Search [位置] 映射问题