在Global.asax.cs中了解Application_Start

时间:2018-10-26 11:40:58

标签: c# asp.net .net asp.net-mvc

我正在使用.NETFramework v4.7.2,并且想管理Global.asax.cs来更改网站的行为。但是我很难理解每一行:

public class MvcApplication : HttpApplication
{
    protected void Application_Start()
    {
        AreaRegistration.RegisterAllAreas();                         // (1)

        GlobalFilters.Filters.Add(new HandleErrorAttribute());       // (2)

        RouteTable.Routes.IgnoreRoute("{resource}.axd/{*pathInfo}"); // (3)

        RouteTable.Routes.MapRoute(                                  // (4)
            "Default",
            "{controller}/{action}/{id}",
            new {controller = "Home", action = "Index", id = UrlParameter.Optional}
        );

        GlobalConfiguration.Configuration.Routes.MapHttpRoute(       // (5)
            name: "DefaultApi",
            routeTemplate: "api/{controller}"
        );
    }
}
  • (1)有人对其功能做了简短的解释吗?
  • (2)它使MvcApplication显示错误页面(如404、500,...)
  • (3)忽略所有扩展名为.axd的路径?
  • (4)它创建一个默认页面并调用HomeController.cs.cshtml来显示内容?如何更改为仅显示简单的index.html
  • (5)它创建api并调用nameController.cs来接收GET和/或POST请求吗?
    • 如何使用/api/Login配置简单的POST请求的接收?这不起作用,仅产生404 (Not Found)415 (Unsupported Media Type)错误:

。 LoginController.cs:

[HttpPost]
[ActionName("Login")]
[Route("api/[controller]")]
public HttpResponseMessage LoginPost([FromBody] LoginJson json)
{
    return Request.CreateResponse(HttpStatusCode.OK);
}

LoginJson.cs:

public class LoginJson
{
    public string Username { get; set; }
    public string Password { get; set; }
}

jQuery:

$.ajax({
        url: '/api/Login',
        type: 'POST',
        dataType: "json",
        contentType: "application/json, charset=utf-8",
        data: JSON.stringify({
            Username: username,
            Password: password
        }),
        ...
});

1 个答案:

答案 0 :(得分:3)

1)我认为这将解释所有有关领域:https://exceptionnotfound.net/asp-net-mvc-demystified-areas/

2)是,但是它允许您自定义在发生错误/异常时默认情况下发生的情况。例如,您可以设置是否出错以重定向到其他控制器...

3)在注释中回答:What is routes.IgnoreRoute("{resource}.axd/{*pathInfo}")-将IgnoreRoute放入MVC的路由配置的原因是确保MVC不会尝试处理请求。这是因为.axd端点需要由另一个HTTP处理程序(不是MVC的处理程序)处理才能提供脚本。

4)不,这仅仅是设置在控制器内执行动作的默认方式...该动作指示要返回的内容(html或cshtml或..)...例如返回常规html,例如:

public ActionResult Index()
{
    return Content("<html></html>");
}

5)类似于4),这是Web API请求的默认路由。您的API调用是正确的,但是您收到的错误意味着您发送给该API的请求是错误的,请参见以下问题:Unsupported media type ASP.NET Core Web API