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响应,最后显示错误消息报错了。
ASP.NET Core MVC中Controller的Action,默认既支持HttpGet,又支持HttpPost的更多相关文章
- ASP.NET Core MVC中Controller的Action如何直接使用Response.Body的Stream流输出数据
在ASP.NET Core MVC中,我们有时候需要在Controller的Action中直接输出数据到Response.Body这个Stream流中,例如如果我们要输出一个很大的文件到客户端浏览器让 ...
- ASP.NET Core MVC中URL和数据模型的匹配
Http GET方法 首先我们来看看GET方法的Http请求,URL参数和ASP.NET Core MVC中Controller的Action方法参数匹配情况. 我定义一个UserController ...
- 在ASP.NET Core MVC中子类Controller拦截器要先于父类Controller拦截器执行
我们知道在ASP.NET Core MVC中Controller上的Filter拦截器是有执行顺序的,那么如果我们在有继承关系的两个Controller类上,声明同一种类型的Filter拦截器,那么是 ...
- ASP.NET MVC和ASP.NET Core MVC中获取当前URL/Controller/Action (转载)
ASP.NET MVC 一.获取URL(ASP.NET通用): [1]获取完整url(协议名+域名+虚拟目录名+文件名+参数) string url=Request.Url.ToString(); [ ...
- ASP.NET Core MVC中的IActionFilter.OnActionExecuting方法,可以获取Controller的Action方法参数值
用过ASP.NET Core MVC中IActionFilter拦截器的开发人员,都知道这是一个非常强大的MVC拦截器.最近才发现IActionFilter的OnActionExecuting方法,甚 ...
- ASP.NET Core MVC中的IActionFilter.OnActionExecuted方法执行时,Controller中Action返回的对象是否已经输出到Http Response中
我们在ASP.NET Core MVC项目中有如下HomeController: using Microsoft.AspNetCore.Mvc; namespace AspNetCoreActionF ...
- ASP.NET Core MVC 中的 [Controller] 和 [NonController]
前言 我们知道,在 MVC 应用程序中,有一部分约定的内容.其中关于 Controller 的约定是这样的. 每个 Controller 类的名字以 Controller 结尾,并且放置在 Contr ...
- 如何在多个项目中分离Asp.Net Core Mvc的Controller和Areas
前言 软件系统中总是希望做到松耦合,项目的组织形式也是一样,本篇文章将介绍在ASP.NET CORE MVC中怎么样将Controller与主网站项目进行分离,并且对Areas进行支持. 实践 1.新 ...
- 006.Adding a controller to a ASP.NET Core MVC app with Visual Studio -- 【在asp.net core mvc 中添加一个控制器】
Adding a controller to a ASP.NET Core MVC app with Visual Studio 在asp.net core mvc 中添加一个控制器 2017-2-2 ...
随机推荐
- 安卓开发_startActivityForResult的详细用法
一个需求:一个activity到另一个activity进行一些设置,返回第一个activity的时候 获取第二个activity设置的数据 百度了一下,发现startActivityForResult ...
- PullToRefreshGridView上拉刷新,下拉加载
PullToRefreshGridView上拉刷新,下拉加载 布局: <?xml version="1.0" encoding="utf-8"?> ...
- 【PHP调试篇】PHP高性能日志组件SeasLog
简述 什么是SeasLog SeasLog是一个C语言编写的PHP扩展,提供一组规范标准的功能函数,在PHP项目中方便.规范.高效地写日志,以及快速地读取和查询日志. 为什么使用SeasLog 无论在 ...
- XP环境下C# 调用Pocess.start()时提示文件找不到的错误解决办法
错误提示如下: System.ComponentModel.Win32Exception (0x80004005): 系统找不到指定的文件. 在 System.Diagnostics.Process. ...
- Django日志信息路径的设置
django日志信息路径的设置, 因为我们经常在代码业务上线时候 需要进行调试,查看代码的后台运行情况,就需要设置django项目的具体的日志信息运维的路径了 LOGGING = { 'version ...
- JavaScript高级特性-实现继承的七种方式
声明和约定: 在C++和Java中,我们可以通过关键字class来声明一个类,在JavaScript中没有这个关键字,但我们知道可以通过new一个function创建对象,这个function类似C+ ...
- php解决前后端验证字符串长度不一致
前端代码 function getStrleng(str){ var myLen =0; for(var i=0;i<str.length;i++){ if(str.charCodeAt(i)& ...
- CentOS7:搭建配置SVN服务器
1. 安装 CentOS通过yum安装subversion. $ sudo yum install subversion subversion安装在/bin目录: $ which svnserve / ...
- nginx基础知识总结
1.nginx的工作模式 master/worker工作模式: 一个master进程: 负载加载和分析配置文件.管理worker进程.平滑重启升级等. 一个或多个worker进程 处理并响应用户请求 ...
- 寒假训练 A - A Knight's Journey 搜索
Background The knight is getting bored of seeing the same black and white squares again and again an ...