Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/rest/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# web api控制器中的路由和多个参数_C#_Rest_Asp.net Core_Routes - Fatal编程技术网

C# web api控制器中的路由和多个参数

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

我知道这已经被问了很多次了,但是没有人真正把它结束

我目前正在使用一个.NET核心后端,它有一个web api控制器

我知道在.NET Core中有多种处理路由的方法,例如

使用约束

[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控制器中的路由和多个参数”的问题。不是更新数据库中的实体更新实体只是我现在想要实现的结果。我必须建立一个路由,因此路由有多个参数。换句话说,我无法让我的控制器识别不同的参数。我只是不知道如何建造这样一条路线