C# web api控制器中的路由和多个参数
我知道这已经被问了很多次了,但是没有人真正把它结束 我目前正在使用一个.NET核心后端,它有一个web api控制器 我知道在.NET Core中有多种处理路由的方法,例如 使用约束C# web api控制器中的路由和多个参数,c#,rest,asp.net-core,routes,C#,Rest,Asp.net Core,Routes,我知道这已经被问了很多次了,但是没有人真正把它结束 我目前正在使用一个.NET核心后端,它有一个web api控制器 我知道在.NET Core中有多种处理路由的方法,例如 使用约束 [HttpGet("{id:int}")] public string GetById(int id) { return "item " + id; } public class Startup { public void ConfigureServices(IServiceCollection
[HttpGet("{id:int}")]
public string GetById(int id)
{
return "item " + id;
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] {"hello", "world!"};
}
// POST api/values
[HttpPost]
public void PostCreate([FromBody] string value)
{
}
}
创建默认路由
[HttpGet("{id:int}")]
public string GetById(int id)
{
return "item " + id;
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] {"hello", "world!"};
}
// POST api/values
[HttpPost]
public void PostCreate([FromBody] string value)
{
}
}
构建RESTful路线
[HttpGet("{id:int}")]
public string GetById(int id)
{
return "item " + id;
}
public class Startup
{
public void ConfigureServices(IServiceCollection services)
{
services.AddMvc();
}
public void Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory)
{
app.UseMvc(routes =>
{
routes.MapRoute(
name: "default",
template: "{controller=Home}/{action=Index}/{id?}");
});
}
}
[Route("api/[controller]")]
public class ValuesController : Controller
{
// GET api/values
[HttpGet]
public IEnumerable<string> Get()
{
return new string[] {"hello", "world!"};
}
// POST api/values
[HttpPost]
public void PostCreate([FromBody] string value)
{
}
}
[路由(“api/[控制器]”)]
公共类值控制器:控制器
{
//获取api/值
[HttpGet]
公共IEnumerable Get()
{
返回新字符串[]{“hello”,“world!”};
}
//后api/值
[HttpPost]
public void post-create([FromBody]字符串值)
{
}
}
还有几个选择
然而,我就是不知道如何在一个路由中传递多个参数
在我的例子中,我必须同时更新两个不同的对象,并且必须使用HTTP补丁或HTTP Put请求
我可以使用类似于api/ExampleName/Id的东西,但我需要的是类似于api/ExampleName/ObjectOneID&ObjectTwoID的东西
有人知道如何建造这样的东西吗
我考虑在启动文件中创建一个默认路由,并在那里进行配置。但是,我想它需要一个特定的语法来读取多个参数,您可以在URI本身中使用参数,比如
http://myapi.com/api/{controller}/{action}?id=someId&anotherId=someOtherId
[HttpPatch]
public async Task<string> Patch([FromBody] Model request)
你的行动方法是
public void PostCreate([FromUri]Guid someId[FromUri]Guid anotherId)
要使用它,只需创建包含ObjectOneID
和ObjectTwoID
的请求体
PATCH api/ExampleName
Content-Type: application/json
{
"ObjectOneID":1,
"ObjectTwoID":2
}
在这种情况下,我建议将POST/PUT与model一起使用
[Route("dummy")]
[HttpPost]
public async Task<IHttpActionResult> Dummy(Foo req)
{
//logic
}
public class Foo
{
public CustomObjectBody ObjectOneID {get;set;}
public CustomObjectBody ObjectTwoID {get;set;}
}
public class CustomObjectBody
{
public int Property1 {get;set;}
public int Property2 {get;set;}
}
[路由(“虚拟”)]
[HttpPost]
公共异步任务虚拟(Foo-req)
{
//逻辑
}
公开课Foo
{
公共CustomObjectBody ObjectOneID{get;set;}
公共CustomObjectBody ObjectTwoID{get;set;}
}
公共类CustomObjectBody
{
公共int属性1{get;set;}
公共int属性2{get;set;}
}
我想我应该更好地解释我的情况。我必须更新同一类的两个对象。两个项目在数据库中都已具有唯一ID。我所期望的是接收具有两个不同主体的两个对象,并创建一个Sql语句,该语句根据body@Ekos好的,这很好,但是关于“一个web api控制器中的路由和多个参数”的问题。不是更新数据库中的实体更新实体只是我现在想要实现的结果。我必须建立一个路由,因此路由有多个参数。换句话说,我无法让我的控制器识别不同的参数。我只是不知道如何建造这样一条路线