个人资料

跳过导航链接首页 > 博客列表 > 博客正文

aspnetcore在razor后台代码响应ajax发出的post/get请求.

:

因为Razor自动集成了自定义mvc,因此razor对于js调用Page后台代码有固定写法.

其中建立的方法名即表明请求的类型,而不能使用mvc的[HttpPost]/[HttpGet]修饰符.

OnGetFunc1    OnGetFunc1Async

在当前cshtml页面js中调用的地址为 ?handler=Func1

其中handler也是固定好了的.要求ajax使用get方式请求

同理OnPostFunc1    OnPostFunc1Async

要求ajax使用post方式请求

对于post请求,razor自动生成了header安全验证.ajax在调用前需要添加token头.

将下面的代码加入_layout.cshtml母版页文件,添加的token即对所有的post请求生效.

    @inject Microsoft.AspNetCore.Antiforgery.IAntiforgery Xsrf
    @functions {
        public string GetAntiXsrfRequestToken()
        {
            return Xsrf.GetAndStoreTokens(Context).RequestToken!;
        }
    }

<script>
    var csrfToken = '@GetAntiXsrfRequestToken()';
     (function (window, document, $) {
        $.ajaxSetup({
            headers: {
                'RequestVerificationToken': csrfToken
            }
        });
    })(window, document, jQuery);
</script>


后台代码示例:

        public async Task<ActionResult?> OnGetMatchListAsync(string puuid, ServerPlatform platform = ServerPlatform.KR, int start = 0, int count = 20)
        {
            try
            {              
.....
                var result = JsonConvert.DeserializeObject<List<string>>(json);

                return new JsonResult(result);
            }
            catch (Exception ex)
            {
                Debug.WriteLine(ex.Message);
                return null;
            }


        }
注意:方法返回值也只能是ActionResult


我理解为razor是mvc的定制.比mvc方便简洁有条理但不如mvc灵活.如灵活性不满足要求,仍可使用mvc.

end

songshizhao
最初发表2025/1/15 0:34:09 最近更新2025/1/15 0:43:47 32
为此篇作品打分
10