asp.net 带有多个参数的Web API httpget

mwkjh3gx  于 2023-03-31  发布在  .NET
关注(0)|答案(5)|浏览(229)

我正在尝试使用WEB API创建我的第一个REST服务,以替换Web窗体www.example.com项目中的一些回发asp.net。在Web窗体项目中,当我浏览到新的网页时,我总是会获得一个ASP.netApplication变量和一个querystring值,以帮助我确定要连接到哪个数据库。在这个旧应用程序中,它连接到几个不同的数据库,这些数据库都具有相同的模式和数据库对象,但每个数据库中的数据不同
我不确定将这些变量传递给REST服务的最佳方式,或者它们是否应该成为路由或其他方法的一部分。
所以在像下面这样的REST方法中

// GET api/<controller>/5
    public string GetCategoryByID(int id)
    {
        return "value";
    }

我可以获取category id并将其传递给我的数据库层,但我还需要上面提到的两个变量。我需要在每次调用REST API时获取这些变量,以便访问相应的数据库。我应该使用以下内容吗:

// GET api/<controller>/5
    public string GetCategoryByID(int id, string applicationEnvironment, string organization)
    {
        return "value";
    }

或者他们应该是路线的一部分,像这样:
API/{appEnvironment}/{organization}/{controller}/{id}
这似乎是一个简单的问题,但我很难找到解决方案。

y4ekin9u

y4ekin9u1#

最后我在httpget调用中传递了额外的参数。除非我得到一些额外的反馈,否则我可能会遵循这种模式。

[HttpGet]
    public Company[] GetProgramCompanies(int id, [FromUri] string org, [FromUri] string appEnvir)
    {
        DataLayer dataAccess = new DataLayer(Utilities.GetConnectionString(org, appEnvir));
        IEnumerable<BudgetProgramCompanyListing> companies = dataAccess.GetProgramCompaniesListing(id).OrderBy(o => o.Company_Name);

        Company[] returnComps = new Company[companies.Count()];
        int count = 0;

        foreach (BudgetProgramCompanyListing bpc in companies)
        {
            returnComps[count] = new Company
            {
                id = bpc.Company_ID,
                name = bpc.Company_Name
            };
            count++;
        }

        return returnComps;
    }

使用此url调用上述服务:
API/programcompanies/6?org=SDSRT&appEnvir=GGGQWRT

a6b3iqyw

a6b3iqyw2#

在.Net core 1.1中,您可以在HttpGet属性中指定更多参数,如下所示:[HttpGet(“{appEnvironment}/{organization}/{controller}/{id}”)]
它也可以在其他.Net版本中工作。

p5cysglq

p5cysglq3#

我曾经按照下面两种方法在HttpGet中传递多个参数

public HttpResponseMessage Get(int id,[FromUri]int DeptID)
    {
        EmpEntity = new EmpDBEntities();
        var entity = EmpEntity.USP_GET_EMPINFO(id, DeptID).ToList();
        if(entity.Count()!=0)
        {
            return Request.CreateResponse(HttpStatusCode.OK, entity);
        }
        else
        {
            return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Employee With ID=" + id.ToString() + " Notfound");
        }

    }

并且在上述方法中webapi url将是http://localhost:1384/api/emps?id=1&DeptID=1。USP_GET_EMPINFO是具有两个参数的存储过程。
在第二个方法中,我们可以使用带有[FromUri]的类来传递多个参数。代码片段如下

public HttpResponseMessage Get(int id,[FromUri]Employee emp)
    {
        EmpEntity = new EmpDBEntities();
        var entity = EmpEntity.USP_GET_EMPINFO(id,emp.DEPTID).ToList();
        if(entity.Count()!=0)
        {
            return Request.CreateResponse(HttpStatusCode.OK, entity);
        }
        else
        {
            return Request.CreateErrorResponse(HttpStatusCode.NotFound, "Employee With ID=" + id.ToString() + " Notfound");
        }

    }

并且webapi url将是http://localhost:1384/api/emps?id=1&DEPTID=1这里DEPTID是类的属性之一。我们可以在url中添加多个参数,用&分隔

goucqfw6

goucqfw64#

可以用逗号分隔数据。

对我来说,下面的工作很完美:

[HttpGet("{value1},{value2}")]
public string GetCategoryByID(string value1, string value 2) => $"{value1} {value2}";
nkoocmlb

nkoocmlb5#

您还可以定义一个模型,并将其与请求一起发送,然后使用[FromBody]将其绑定到API函数中的变量。
比如:

[HttpGet]
public Company[] GetProgramCompanies([FromBody] YourModel model) { ... }

如图所示Model binding in Asp.Net Core

相关问题