ardalis / ApiEndpoints

A project for supporting API Endpoints in ASP.NET Core web applications.
MIT License
3.13k stars 227 forks source link

Visual Studio 2022 Endpoint Explorer Integration #196

Open cmarkwick365 opened 1 year ago

cmarkwick365 commented 1 year ago

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?

ardalis commented 1 year ago

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)?

cmarkwick365 commented 1 year ago

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

ardalis commented 1 year ago

Hmm, well we have that attribute: https://github.com/ardalis/ApiEndpoints/blob/main/src/Ardalis.ApiEndpoints/EndpointBase.cs#L8

cmarkwick365 commented 1 year ago

I suspect it also utilizes the Http* attributes.

ardalis commented 1 year ago

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

emilun commented 1 year ago

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

Edgaras91 commented 1 year ago

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

ardalis commented 1 year ago

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.

johnholliday commented 1 year ago

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);
}}
ardalis commented 1 year ago

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

ardalis commented 1 year ago

Pinged them here: https://twitter.com/ardalis/status/1701282105005646180

cmarkwick365 commented 1 year ago

Thanks for making me (in)famous Steve πŸ‘
Lol

johnholliday commented 1 year ago

Thanks (although I’m not feeling very β€˜X’ lately). I did send feedback via VS, so let’s see.

Get Outlook for iOShttps://aka.ms/o0ukef


From: Chris Markwick @.> Sent: Tuesday, September 12, 2023 9:54:28 AM To: ardalis/ApiEndpoints @.> Cc: John Holliday @.>; Comment @.> Subject: Re: [ardalis/ApiEndpoints] Visual Studio 2022 Endpoint Explorer Integration (Issue #196)

Thanks for making me (in)famous Steve πŸ‘

β€” Reply to this email directly, view it on GitHubhttps://github.com/ardalis/ApiEndpoints/issues/196#issuecomment-1715773828, or unsubscribehttps://github.com/notifications/unsubscribe-auth/ABIMPXCTR7PL4BROQXLP3B3X2BSRJANCNFSM6AAAAAAZXGSBNM. You are receiving this because you commented.Message ID: @.***>

ardalis commented 1 year ago

Yeah reports via this method are more likely to be acted upon, it seems: https://learn.microsoft.com/en-us/visualstudio/ide/how-to-report-a-problem-with-visual-studio?view=vs-2022

ramiabughazaleh commented 1 year ago

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".