ardalis / ApiEndpoints

A project for supporting API Endpoints in ASP.NET Core web applications.

Geek Repo:Geek Repo

Github PK Tool:Github PK Tool

Visual Studio 2022 Endpoint Explorer Integration

cmarkwick365 opened this issue · comments

ApiEndPoints does not appear to work with VS 2022 Endpoint Explorer. Is it possible to enable this feature or is there a way to get it working out of the box?

Hmm, the feature is still in preview, right?
https://devblogs.microsoft.com/visualstudio/web-api-development-in-visual-studio-2022/

I haven't used it myself but in the example shown in that article it's working with minimal API endpoints, though they claim it will also work with Controller-based endpoints. This library depends on Controllers, so any feature that discovers Controller-based endpoints should work with it. Do you have a sample you can share? Does the feature work with a vanilla controller class, but not with one that inherits from one of this package's base endpoint classes (which in turn inherit from controllers)?

Thanks for your fast response Steve. I believe it's out of preview in VS 17.6, I think it relies upon the [ApiController] attribute.
This article may help:
https://dev.to/andytechdev/step-by-step-guide-testing-http-endpoints-in-visual-studio-2022-using-endpoints-explorer-fpb

I suspect it also utilizes the Http* attributes.

Apparently the endpoints explorer menu option only appears if you first select a web project in solution explorer...

I can open the "Endpoints Explorer" window and it shows the api project. However, no endpoints are discovered.

It may not be related, but for me, Endpoints Explorer only picks up if the controller class has [ApiController], but it doesn't pick up if it inherits a custom base controller that has [ApiController] attribute:

WORKS:

    [ApiController]
    [Route("accounts")]
    public class AccountController : ApiControllerBase

DOESN'T WORK:

    [Route("accounts")]
    public class AccountController : ApiControllerBase
    [ApiController]
    [Route("api/[controller]")]
    public abstract class ApiControllerBase : ControllerBase

I am using Visual Studio 2022 17.6.2 Professional

Yeah, it definitely still has a ways to go to catch all of the endpoints in the project. They could also leverage the swagger file from the running project as a possible way to build their list of endpoints. Probably a good idea to leave feedback for them in their own repo and/or on social media where they'll see it (copy @VisualStudio). In the meantime I don't think it hurts anything if you add "extra" [ApiController] attributes to endpoints just for the sake of discoverability for the tool. I haven't tried it, though.

I've found that the Endpoints Explorer window only recognizes literal strings for routes. For example, the following declaration shows up in the Endpoints Explorer window:

public static class MyEndpoints {
  public static void MapMyEndpoints(this IEndpointRouteBuilder routes) {
    var group = routes.MapGroup("api/test");
    group.MapGet("/{id}", TestGetMethod);
}}

However, the following is invisible to the Endpoints Explorer window:

public static class MyEndpoints {
  private const string ApiBase = "api/Test";
  public static void MapMyEndpoints(this IEndpointRouteBuilder routes) {
    var group = routes.MapGroup(ApiBase);
    group.MapGet($"{ApiBase}/{id}", TestGetMethod);
}}

Definitely seems like a bug on their end. Have you reported it with the feedback icon in VS?

Thanks for making me (in)famous Steve 👍
Lol

Hi.

I found the Visual Studio feedback item @johnholliday reported regarding discovering non-literal strings for routes here:
https://developercommunity.visualstudio.com/t/Endpoints-Explorer-fails-to-recognize-no/10463837

This issue is still marked as "Under Consideration"

I found a Visual Studio feedback item related to the issue @cmarkwick365 and @Edgaras91 encountered, regarding ApiControllerBase class inheritance, and the [ApiController] attribute here:
https://developercommunity.visualstudio.com/t/Bug-in-Endpoints-Explorer:-Controllers-n/10359760

This issue is marked as "Fixed In: Visual Studio 2022 version 17.7".