-
Notifications
You must be signed in to change notification settings - Fork 25.3k
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Document additional diagnostics (#23610)
* Document additional diagnostics * Apply suggestions from code review Co-authored-by: Rick Anderson <[email protected]> * Apply suggestions from code review Co-authored-by: Rick Anderson <[email protected]> * Apply suggestions from code review Co-authored-by: Kirk Larkin <[email protected]> * Apply suggestions from code review Co-authored-by: Kirk Larkin <[email protected]> Co-authored-by: Rick Anderson <[email protected]> Co-authored-by: Kirk Larkin <[email protected]>
- Loading branch information
1 parent
dba052e
commit fc0f4c7
Showing
5 changed files
with
169 additions
and
2 deletions.
There are no files selected for viewing
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
--- | ||
title: "MVC1002: Route attribute cannot be applied to page handler methods" | ||
description: "Learn about analysis rule MVC1002: Route attribute cannot be applied to page handler methods" | ||
author: pranavkm | ||
monikerRange: '>= aspnetcore-3.1' | ||
ms.author: riande | ||
ms.date: 10/22/2021 | ||
no-loc: [Home, Privacy, Kestrel, appsettings.json, "ASP.NET Core Identity", cookie, Cookie, Blazor, "Blazor Server", "Blazor WebAssembly", "Identity", "Let's Encrypt", Razor, SignalR] | ||
uid: diagnostics/mvc1002 | ||
--- | ||
# MVC1002: Route attribute cannot be applied to page handler methods | ||
|
||
| | Value | | ||
|-|-| | ||
| **Rule ID** |MVC1002| | ||
| **Fix is breaking or non-breaking** |Non-breaking| | ||
|
||
## Cause | ||
|
||
An attribute implementing <xref:Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider> was applied to a Razor Page handler method. | ||
|
||
### Rule description | ||
|
||
Razor Page handler methods are selected after routing is completed, and consequently cannot contribute a route. Applying a route attribute such as `HttpGet` or `HttpPost` to a Razor Page handler is not supported. | ||
|
||
```csharp | ||
public class IndexModel : PageModel | ||
{ | ||
[HttpGet("/my-url")] | ||
public IActionResult OnGet() => Page(); | ||
} | ||
``` | ||
|
||
## How to fix violations | ||
|
||
Remove the route attribute from the handler. Routes can be specified for a Razor Page using an `@page` directive or by using conventions. For more information, see [custom routes in Razor Pages](<xref:razor-pages/index#custom-routes>). | ||
|
||
## When to suppress warnings | ||
|
||
Don't suppress warnings from this rule. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,40 @@ | ||
--- | ||
title: "MVC1003: Route attributes cannot be applied to page models" | ||
description: "Learn about analysis rule MVC1003: Route attributes cannot be applied to page models" | ||
author: pranavkm | ||
monikerRange: '>= aspnetcore-3.1' | ||
ms.author: riande | ||
ms.date: 10/22/2021 | ||
no-loc: [Home, Privacy, Kestrel, appsettings.json, "ASP.NET Core Identity", cookie, Cookie, Blazor, "Blazor Server", "Blazor WebAssembly", "Identity", "Let's Encrypt", Razor, SignalR] | ||
uid: diagnostics/mvc1003 | ||
--- | ||
# MVC1003: Route attributes cannot be applied to page models | ||
|
||
| | Value | | ||
|-|-| | ||
| **Rule ID** |MVC1003| | ||
| **Fix is breaking or non-breaking** |Non-breaking| | ||
|
||
## Cause | ||
|
||
An attribute implementing <xref:Microsoft.AspNetCore.Mvc.Routing.IRouteTemplateProvider> was applied to a Razor Page model. | ||
|
||
### Rule description | ||
|
||
Razor Page models are identified after routing is completed, and consequently cannot contribute a route. Applying a route attribute such as `Route` to a Razor Page model is not supported. | ||
|
||
```csharp | ||
[Route("/my-page-route")] | ||
public class IndexModel : PageModel | ||
{ | ||
public IActionResult OnGet() => Page(); | ||
} | ||
``` | ||
|
||
## How to fix violations | ||
|
||
Remove the route attribute from the page model. Routes can be specified for a Razor Page using an `@page` directive or by using conventions. For more information, see [custom routes in Razor Pages](<xref:razor-pages/index#custom-routes>). | ||
|
||
## When to suppress warnings | ||
|
||
Don't suppress warnings from this rule. |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,68 @@ | ||
--- | ||
title: "MVC1004: Rename model bound parameter" | ||
description: "Learn about analysis rule MVC1004: Rename model bound parameter" | ||
author: pranavkm | ||
monikerRange: '>= aspnetcore-3.1' | ||
ms.author: riande | ||
ms.date: 10/22/2021 | ||
no-loc: [Home, Privacy, Kestrel, appsettings.json, "ASP.NET Core Identity", cookie, Cookie, Blazor, "Blazor Server", "Blazor WebAssembly", "Identity", "Let's Encrypt", Razor, SignalR] | ||
uid: diagnostics/mvc1004 | ||
--- | ||
# MVC1004: Rename model bound parameter | ||
|
||
| | Value | | ||
|-|-| | ||
| **Rule ID** |MVC1004| | ||
| **Fix is breaking or non-breaking** |Breaking| | ||
|
||
## Cause | ||
|
||
A model bound parameter has the same name as one of its properties. | ||
|
||
### Rule description | ||
|
||
Model binding a complex parameter with a property that has the same name may result in unexpected binding behavior. Consider renaming the parameter, or using a binding attribute to specify a different name. | ||
|
||
Consider the following code: | ||
|
||
```csharp | ||
public class HomeController : Controller | ||
{ | ||
public IActionResult Get(SearchModel search) | ||
{ | ||
... | ||
} | ||
} | ||
|
||
public class SearcModel | ||
{ | ||
public string Search { get; set; } | ||
} | ||
``` | ||
|
||
In this model, the parameter and its property are both named `Search`, which results in model binding attempting to bind the property as `search.Search`. Naming a parameter and its property the same prevents binding to a value without a prefix such as a query that looks like `?search=MySearchTerm`. | ||
|
||
## How to fix violations | ||
|
||
* Rename the parameter if its prefix is not used during binding: | ||
```csharp | ||
public IActionResult Get(SearchModel model) | ||
{ | ||
... | ||
} | ||
``` | ||
|
||
Renaming a parameter on a public type could be considered a breaking change since it changes a library's public API surface. | ||
|
||
* If this is problematic, consider using a model binding attribute such as `Bind` to specify the model binding prefix: | ||
|
||
```csharp | ||
public IActionResult Get([Bind(Prefix = "")] SearchModel search) | ||
{ | ||
... | ||
} | ||
``` | ||
|
||
## When to suppress warnings | ||
|
||
Warnings can be suppressed if you intend to use the parameter name as a prefix during model binding. |