我一直在研究微软的ASP.NET MVC教程,最后到了这个页面
http://www.asp.net/learn/mvc/tutorial-32-cs.aspx
以下声明是针对此页面的底部进行的:
通常,在调用修改Web应用程序状态的操作时,您不希望执行HTTP GET操作.执行删除时,您希望执行HTTP POST,或者更好的是,执行HTTP DELETE操作.
这是真的?任何人都能对这一陈述背后的理由提供更详细的解释吗?
维基百科声明如下:
某些方法(例如,HEAD,GET,OPTIONS和TRACE)被定义为安全,这意味着它们仅用于信息检索,不应更改服务器的状态.
相比之下,POST,PUT和DELETE等方法适用于可能导致服务器副作用的操作
我有一个相对简单的WebApi网站,其中包含几个控制器,它们在OWIN中以AutoFac作为DI容器运行。
该站点仅使用属性路由进行设置,但即使遇到无效路由也始终返回200 OK响应。我们也有一些过滤器和一个运行的静态文件服务器,但是我已经注释掉了启动文件中的所有代码(所有IAppBuilder调用,甚至是HttpConfiguration的创建),但是我们仍然可以做到这一点。在IIS和IIS Express中都会发生这种情况。
我也曾尝试在其中添加默认路由,但看到的行为相同。
我已经读了一些书,并且了解到我可以在流水线中编写某种钩子,或者编写一个具有捕获所有路由和返回404的动作的控制器,但是感觉好像没有必要。
这是默认行为吗?
我已经看过这个答案了,但我们没有global.asax:ASP.NET Web Api在应返回404时返回200 OK
请参见下面的精简代码,该代码仍能说明问题
启动文件
[assembly: OwinStartup(typeof(Startup))]
namespace Api.blah
{
using Owin;
public class Startup
{
public void Configuration(IAppBuilder app)
{
var config = new HttpConfiguration();
var container = this.GetAutofacContainer(config);
config.DependencyResolver = new AutofacWebApiDependencyResolver(container);
config.MapHttpAttributeRoutes();
app.UseWebApi(config);
}
private IContainer GetAutofacContainer(HttpConfiguration config)
{
ContainerBuilder containerBuilder = new ContainerBuilder();
containerBuilder.RegisterApiControllers(Assembly.GetExecutingAssembly());
return containerBuilder.Build();
}
}
}
Run Code Online (Sandbox Code Playgroud)
HealthController.cs
namespace Api.blah.Controller
{
[RoutePrefix("api/health")]
public class HealthController : ApiController
{
public HealthController()
{
}
[HttpGet]
[Route]
public …Run Code Online (Sandbox Code Playgroud)