ASP.NET Core MVC中Controller的Action,默认既支持HttpGet,又支持HttpPost
我们知道ASP.NET Core MVC中Controller的Action上可以声明HttpGet和HttpPost特性标签,来限制可以访问Action的Http请求类型(GET、POST等)。
那么默认情况下如果我们没有给Controller的Action声明任何标签,那Action支持的是什么类型的Http请求呢?
为此我们新建一个ASP.NET Core MVC项目,并且新建一个HomeController,它有两个Action,如下所示:
public class HomeController : Controller { public IActionResult Index() { return View(); } public object ShowData() { return new { Message="Good job!" }; } }
其中ShowData这个Action会返回一个Json对象,用来响应从客户端浏览器发送过来的Ajax请求,也就是Http请求。
此外我们给HomeController的Index这个Action定义了一个视图Index.cshtml,如下所示:
@{ Layout = null; } <!DOCTYPE html> <html> <head> <meta name="viewport" content="width=device-width" /> <title>Index</title> <script type="text/javascript" src="~/lib/jquery/dist/jquery.js"></script> <script type="text/javascript"> $(function (){ $("#btnPost").click(function () { $.ajax({ type: "POST", cache: false, contentType: "application/json; charset=utf-8", dataType: "json", url: "/Home/ShowData", data: {}, success: function (data) { alert(data.message); }, error: function (xhr, ts, et) { alert("Error"); } }); }); $("#btnGet").click(function () { $.ajax({ type: "GET", cache: false, contentType: "application/json; charset=utf-8", dataType: "json", url: "/Home/ShowData", data: {}, success: function (data) { alert(data.message); }, error: function (xhr, ts, et) { alert("Error"); } }); }); }); </script> </head> <body> <div> <button id="btnPost">Post</button> </div> <div> <button id="btnGet">Get</button> </div> </body> </html>
该视图上,两个Html按钮btnGet和btnPost,分别用来向HomeController的ShowData这个Action,发送GET和POST类型的Ajax请求。
如果 Ajax请求成功被ShowData这个Action响应,那么页面会输出ShowData返回的message值“Good job!”。
如果 Ajax请求没有被ShowData这个Action响应,那么页面会输出错误消息“Error”。
下面我们就来测试下:
访问Url地址Home/Index,在浏览器中先点击页面上的btnGet按钮,发送GET请求,结果如下:
然后在浏览器中点击页面上的btnPost按钮,发送POST请求,结果如下:
可以看到当我们没有给HomeController中的ShowData这个Action上声明任何特性标签的时候,实际上就相当于既声明了HttpGet特性标签,又声明了HttpPost特性标签,ShowData会同时响应两种类型的Http请求,相当于如下代码:
public class HomeController : Controller { public IActionResult Index() { return View(); } [HttpGet] [HttpPost] public object ShowData() { return new { Message = "Good job!" }; } }
但是如果我们只给ShowData上声明一个Http特性标签,那么其就只会响应一种类型的Http请求了,例如如果我们现在在ShowData上只声明HttpPost特性标签,如下所示:
public class HomeController : Controller { public IActionResult Index() { return View(); } [HttpPost] public object ShowData() { return new { Message = "Good job!" }; } }
那么现在点击视图Index.cshtml上的btnGet按钮,会显示如下结果:
可以看到GET类型的Ajax请求没有被ShowData响应,最后显示错误消息报错了。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架
2018-01-24 ASP.NET CORE中使用Cookie身份认证
2017-01-24 SSAS中CUBE的多对多关系既可以出现在中间事实表上也可以出现在中间维度表上
2016-01-24 SSAS 聚合设计提升CUBE的查询性能(转载)