在Controller和ApiController之间进行通信

时间:2014-02-16 00:34:42

标签: jquery asp.net-mvc rest

MVC开发的新手,对于我们的项目,我们正在与SQL数据库进行REST通信。就我而言,我有两个控制器, DrugEntriesListController DrugEntryController 。前者源自 Controller 并控制网页视图,而后者源自 ApiController ,并通过存储库类处理RESTful HTTP POST / GET与我们的数据库(教程)我跟着is this one)。

在我的网页中,您可以上传文件(using this tutorial),该文件通过跟踪上传文件的内置请求类路由到DrugEntriesListController。从那里,我可以发送要解析的文件,等等。但是,我的问题是:为了将解析后的数据RESTful上传到数据库,我需要通过DrugEntryController,因为它是一个ApiController并具有HTTP POST / GET电话。问题是,我不知道如何访问它而不从视图控制器或其他文件中实例化新的。

也许我很误解(非常可能),但是ApiController通过DrugEntriesList视图 Index.cshtml 进行交互,这是我当前的代码:

@{
  ViewBag.Title = "Index";
  Layout = "~/Views/Shared/_Layout.cshtml";
}

<div id="body">
  <ul id="drug_entries"></ul>
</div>

@section scripts{
<script type="text/javascript">
  $(function ()
  {
    $.getJSON('/api/DrugEntry', function (drugEntriesJsonPayload)
    {
      $(drugEntriesJsonPayload).each(function (i, item)
      {
        $('#drug_entries').append('<li>' > + item.NDC + '</li>');
      });
    });
  });
</script>
}

上传药物数据库的新.CSV文件:

@using (Html.BeginForm ("", 
  "DrugEntriesList", 
  FormMethod.Post, 
  new {enctype="multipart/form-data"}))
{
  <input type="file" name="newCSV" /><br />
  <input type="submit" name="Submit" id="Submit" value="Upload" />
}

由于我有一堵混乱的乱码,tl; dr是我需要将Controller中收到的信息存入已经存在的ApiController。

1 个答案:

答案 0 :(得分:0)

所以,我要陈述宗教答案(这就是我决定编程的方式,而不是最佳实践或事实方式)。

我不使用ApiController除非;它将由外部第三方调用,或者我正在使用旨在直接针对RESTful服务的第三方框架(Kendo,Knockout)。

在您的具体情况下,您没有理由 使用ApiController。您的代码可能如下所示:

[脚本]

$.getJSON('/DrugEntry/GetList', //...

并[c#]

public class DrugEntryController
{
  [HttpPost]
  public ActionResult GetList()
  {
    // blah blah get list
    IEnumerable<DrugEntry> drugs = db.GetDrugs();

    return this.Json(drugs);
  }
}