Я пытаюсь использовать шаблон VS 2013 AngularJS SPA с Web Api, но приложение никогда не входит в мой контроллер, даже если оно входит в раздел app.js, который вызывает этот контроллер, вот моя настройка:
WebApiConfig.cs внутри папки App_Start
using Newtonsoft.Json.Serialization;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
//using System.Web.Mvc;
namespace App.TheForm
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
config.Formatters.JsonFormatter.SerializerSettings.ContractResolver = new CamelCasePropertyNamesContractResolver();
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
FormController.cs внутри папки Controllers:
namespace App.TheForm.Controllers
{
public class FormController : ApiController
{
public IEnumerable<Dictionary<string, object>> GetFormList()
{
List<DataRow> formList = new List<DataRow>();
SqlConnection con = new System.Data.SqlClient.SqlConnection(@"Data Source=MyConnection;Initial Catalog=Forms;Integrated Security=True");
con.Open();
SqlCommand cmd = new SqlCommand("sp_Get_FormList", con);
cmd.CommandType = CommandType.StoredProcedure;
SqlParameter pFormId = new SqlParameter("@FormId", 3);
cmd.Parameters.Add(pFormId);
SqlDataAdapter da = new SqlDataAdapter(cmd);
DataTable dt = new DataTable();
try
{
da.Fill(dt);
itList<Dictionary<string, object>> rows = new List<Dictionary<string, object>>();
Dictionary<string, object> row;
foreach (DataRow dr in dt.Rows)
{
row = new Dictionary<string, object>();
foreach (DataColumn col in dt.Columns)
{
row.Add(col.ColumnName, dr[col]);
}
rows.Add(row);
}
return rows;
}
catch (Exception ex)
{
}
finally
{
cmd.Dispose();
con.Close();
}
return null;
}
}
}
Контроллер AngularJS:
app.controller('FormController', function ($scope, $http) {
$http.get('api/form/getformlist').success(function (data) {
$scope.formlList = data;
}).error(function () {
alert('Error reading JSON file.');
});
}
});
index.cshtml
@{
PageData["title"] = "AngularJS SPA Template for Visual Studio";
}
<h2>Welcome!</h2>
<p>This is just a demo page.</p>
<table ng-app="app" border="1" ng-controller="FormController">
<tr ng-repeat="form in formlList" ng-class-odd="'odd'" ng-class-even="'even'">
<td>
{{form[0]}}
</td>
<td>
{{form[1]}}
</td>
</tr>
</table>
RouteConfig.cs внутри App_Start:
namespace App.TheForm
{
using System.Web.Routing;
using App.TheForm.Routing;
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.Add("Default", new DefaultRoute());
}
}
}
Любая помощь приветствуется.
ОБНОВЛЕНИЕ: эта проблема возникает только при использовании шаблона AngularJS SPA. Когда я воссоздаю этот проект, используя пустое веб-приложение с веб-API, все работает нормально. Я думаю, что шаблон AngularJS SPA портит конфигурацию и маршрутизацию проекта.
api/{controller}/{id}
не будет совпадать с вашим маршрутом,api/{controller}/{action}
- person Claies   schedule 27.02.2015config.Routes.MapHttpRoute( name: "DefaultApi", routeTemplate: "api/{controller}/{action}", defaults: new { action = RouteParameter.Optional }
, но без изменений - person superconsultant   schedule 27.02.2015http://yourserver.com/api/form/getformlist
необработанные данные, если вы просматриваете их в своем браузере? - person Claies   schedule 27.02.2015getformlist
, я также заметил, что, поскольку я использую шаблон SPA AngularJS, он создал RouteConfig.cs внутри App_Start, возможно, это вызывает эту проблему, я добавил его код в конец моего вопроса. Спасибо за помощь. - person superconsultant   schedule 27.02.2015