我正在使用一个工作的Web API应用程序,它有一个名为StudyDataController
的控制器,它接受输入参数,查询数据库并返回JSON中的结果。这块工作正常。调用http://localhost:3214/api/StudyDataController?param1=R01¶m2=05-NOV-16
会返回结果。
public class StudyDataController : ApiController
{ [HttpGet]
public HttpResponseMessage Getdetails(string param1, DateTime param2)
{
List<OracleParameter> p = new List<OracleParameter>();
p.Add(new OracleParameter("param1", OracleDbType.Varchar2,param1, ParameterDirection.Input));
p.Add(new OracleParameter("param2",OracleDbType.Date,param2, ParameterDirection.Input));
string connStr = ConfigurationManager.ConnectionStrings["StudyDataConnection"].ConnectionString;
using (OracleConnection dbconn = new OracleConnection(connStr))
{
DataSet userDataset = new DataSet();
var strQuery = "SELECT * from Studydata_VW where Request_id = :param1 and RequestDate > :param2 ";
var returnObject = new { data = new OracleDataTableJsonResponse(connStr, strQuery, prms.ToArray()) };
var response = Request.CreateResponse(HttpStatusCode.OK, returnObject, MediaTypeHeaderValue.Parse("application/json"));
ContentDispositionHeaderValue contentDisposition = null;
if (ContentDispositionHeaderValue.TryParse("inline; filename=StudyData.json", out contentDisposition))
{
response.Content.Headers.ContentDisposition = contentDisposition;
}
return response;
}}}
但是我现在需要创建一个具有不同输入参数的API,并且查询不同并返回结果为JSON。为此,我尝试在同一个应用程序上创建一个名为StudyDatawithDateController
的Controller。
public class StudyDatawithDateController : ApiController
{ [HttpGet]
public HttpResponseMessage Getdetails(DateTime param1,String param2)
{
List<OracleParameter> p = new List<OracleParameter>();
p.Add(new OracleParameter("param1",OracleDbType.Date,param1, ParameterDirection.Input));
p.Add(new OracleParameter("param2", OracleDbType.Varchar2,param2, ParameterDirection.Input));
string connStr = ConfigurationManager.ConnectionStrings["StudyDataConnection"].ConnectionString;
using (OracleConnection dbconn = new OracleConnection(connStr))
{
DataSet userDataset = new DataSet();
var strQuery = "SELECT * from Studydata_VW where Submit_date> :param1 and Status = :param2 ";
var returnObject = new { data = new OracleDataTableJsonResponse(connStr, strQuery, prms.ToArray()) };
var response = Request.CreateResponse(HttpStatusCode.OK, returnObject, MediaTypeHeaderValue.Parse("application/json"));
ContentDispositionHeaderValue contentDisposition = null;
if (ContentDispositionHeaderValue.TryParse("inline; filename=StudyDatawithDate.json", out contentDisposition))
{
response.Content.Headers.ContentDisposition = contentDisposition;
}
return response;
}}}
如果我尝试像http://localhost:3214/api/StudyDatawithDateController?param1=01-NOV-16¶m2=COMPLETE
那样调用端点,则会显示Not Found Error
。
webConfig.cs如下所示
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
我们可以在同一个WebAPI应用程序上有两个控制器。大多数问题/样本都在讨论有关同名控制器的问题。但在这里我有不同的名字,我该如何处理。
答案 0 :(得分:1)
您可以将许多路由使用get请求转到同一个Controller但具有不同属性路由的不同操作。只需在您希望路由处理的方法上添加属性路由
[HTTPGET] // http://localhost:3214/api/StudyDatawithDateController?param1=01-NOV-16¶m2=COMPLETE 〔路线(&#34; API / StudyDatawithDateController /参数1 / {参数1:串} / param2的/ {参数:字符串&#34;})]
http://localhost:3214/api/StudyDataController?param1=R01¶m2=05-NOV-16 〔路线(&#34; API / StudyDataController /参数1 / {参数1:串} / param2的/ {参数:字符串&#34)]
上面的示例仍然不起作用。但是如果你改变了网址 - 特别是param2和param1 - 给它们一些描述性名称,在端点你将有不同的参数。
第二个例子中的param2是Date,在第一个字符串中表示COMPLATE。 - 更改添加属性路线,你会没事的。