Manhao Chen
Manhao Chen

Reputation: 409

ASP.NET Core: Many routes -> always only one controller

Similar to SO ASP.NET MVC: Many routes -> always only one controller:

O have a .net 4.7 MVC project project

my config route are as follows (following from the above post)

config.Routes.MapHttpRoute(
    name: "AllRoutes",
    routeTemplate: "{*url}",
    defaults: new
    {
      controller = "base",
    });

my base controller in my .net 4.7 project

public class BaseController : ApiController
{
  [HttpGet]
  public IHttpActionResult Get(HttpRequestMessage request)
  {
    return Ok();
  }

  [HttpPost]
  public IHttpActionResult Post(HttpRequestMessage request)
  {
    return Ok();
  }

  [HttpPut]
  public IHttpActionResult Put(HttpRequestMessage request)
  {
    return Ok();
  }

  [HttpDelete]
  public IHttpActionResult Delete(HttpRequestMessage request)
  {
    return Ok();
  }
}

now I'm porting my project into a .NET Core 2.0

I can't seem to setup the same thing

my config in the .net core project is as follows

 app.UseMvc(routes =>
  {
    routes.MapRoute(
      name: "AllRoutes",
      template: "{*url}",
      defaults: new
      {
        controller = "Base"
      }
    );

my base controller for my .net core project

//[Route("api/[controller]")]
public class BaseController : Controller
{
  [HttpGet]
  public IActionResult Get()
  {
    return Ok("get success");
  }

  // POST api/values
  [HttpPost]
  public IActionResult Post([FromBody]string value)
  {
    return Ok("post success");
  }

  [HttpPut]
  public IActionResult Put([FromBody]string value)
  {
    return Ok("put success");
  }

  [HttpDelete]
  public IActionResult Delete()
  {
    return Ok("delete success");
  }
}

any ideas?

Upvotes: 1

Views: 968

Answers (3)

Tseng
Tseng

Reputation: 64150

Why do you even want to use MVC, when you have no controllers or routes?

Just use a custom middleware:

// Startup configure
app.Use(async (context, next) => 
{
    var service = context.RequestServices.GetRequiredServce<MyService>();
    var service.Execute();

    async next();
});

Update

Just in case it's not clear, you can inject IHttpContextAccessor in your service, where you can directly access the request stream and do whatever you need to do with it.

Upvotes: 3

Jorjini
Jorjini

Reputation: 25

or if you want to route this links you need add something like this

public class BaseController : Controller {
[Route("/get")]
public IActionResult Get() {
return Ok("get success");
}
}

Upvotes: -1

Jorjini
Jorjini

Reputation: 25

public class BaseContoller : Controller {

[HttpGet("/base/get")]
public IActionResult Get() {
  return Ok("get success");
}
[HttpPost("/base/post")]
public IActionResult Post() {
return Ok("post success");
}
}

you looking for something like this?

Upvotes: -1

Related Questions