ASP.NET核心:许多路由 - >总是只有一个控制器

时间:2017-09-06 04:03:44

标签: asp.net-core asp.net-core-mvc

类似于SO ASP.NET MVC: Many routes -> always only one controller

O有一个.net 4.7 MVC项目项目

我的配置路线如下(从上面的帖子开始)

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();
  }
}

我的.net 4.7项目中的基本控制器

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

现在我将我的项目移植到.NET Core 2.0

我似乎无法设置相同的东西

.net核心项目中的配置如下

//[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");
  }
}

我的.net核心项目的基本控制器

Error:Execution failed for task ':app:processDebugManifest'.
> Manifest merger failed : Attribute meta-data#android.support.VERSION@value value=(26.0.2) from [com.android.support:design:26.0.2] AndroidManifest.xml:28:13-35
is also present at [com.android.support:customtabs:26.0.1] AndroidManifest.xml:25:13-35 value=(26.0.1).
Suggestion: add 'tools:replace="android:value"' to <meta-data> element at AndroidManifest.xml:26:9-28:38 to override.

任何想法?

3 个答案:

答案 0 :(得分:3)

为什么在没有控制器或路由时甚至想使用MVC?

只需使用自定义中间件:

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

    async next();
});

更新

如果不清楚,您可以在服务中注入IHttpContextAccessor,您可以直接访问请求流并执行您需要执行的操作。

答案 1 :(得分:-1)

public class BaseContoller : Controller {

[HttpGet("/base/get")]
public IActionResult Get() {
  return Ok("get success");
}
[HttpPost("/base/post")]
public IActionResult Post() {
return Ok("post success");
}
}
你正在寻找这样的东西吗?

答案 2 :(得分:-1)

或者如果您想要路由此链接,您需要添加类似这样的内容

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