这是我的问题。我继承了一个包含3个部分的项目解决方案。一个Sharepoint页面项目、一个API项目和一个SSIS项目。我一直在根据需要添加和学习,现在我需要指导。最近,我在WEB Api项目中添加了2个标准的MVC 4网页,以CRUD 2新表。在此之后,我添加了一个新的Web API端点,以查询要添加到Sharepoint项目的新分析页面的部分新数据。我的问题是,无论我如何配置路由,我都无法让端点做出响应。我今天发现有两个(或更多?)引擎做路由,Web API和ASPMVC,我相信我在项目中混合了这两种风格是我的问题。。。
这是我的WebApiConfig:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web.Http;
using System.Web.Http.Cors;
using WebApiContrib.Formatting.Jsonp;
namespace API_MetricsWarehouse
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API configuration and services
// enable CORS
var cors = new EnableCorsAttribute("*", "*", "*");
config.EnableCors(cors);
// jsonp
var jsonpFormatter = new JsonpMediaTypeFormatter(config.Formatters.JsonFormatter);
config.Formatters.Add(jsonpFormatter);
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "Sites",
routeTemplate: "api/sites/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "ReportDates",
routeTemplate: "api/reportdates/{id}",
defaults: new { id = RouteParameter.Optional }
);
config.Routes.MapHttpRoute(
name: "SafetyDates",
routeTemplate: "api/safetydates/{id}",
defaults: new { id = RouteParameter.Optional }
);
}
}
}
`和我的RouteConfig:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Mvc;
using System.Web.Routing;
namespace API_MetricsWarehouse
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional }
);
}
}
}
还有我的Global.asax
using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.Web.Http;
using System.Web.Mvc;
using System.Web.Optimization;
using System.Web.Routing;
namespace API_MetricsWarehouse
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
}
}
}
还有我最新的控制器。。。
using System;
using System.Collections.Generic;
using System.Data;
using System.Data.Entity;
using System.Data.Entity.Infrastructure;
using System.Linq;
using System.Net;
using System.Net.Http;
using System.Web.Http;
using System.Web.Http.Description;
using API_MetricsWarehouse.Models;
using System.Web.Http.Cors;
namespace API_MetricsWarehouse.Controllers
{
public class SafetyDatesController : ApiController
{
private MetricsWarehouseEntities db = new MetricsWarehouseEntities();
// GET: api/SafetyDates
public IQueryable<SafetyDates> GetSafetyDates()
{
var result = db.SafetyAnalysis1.AsQueryable();
result = result
.GroupBy(x => x.YearMonth)
.Select(x => x.FirstOrDefault())
.Distinct()
.OrderByDescending(x => x.YearMonth);
return result
.AsEnumerable()
.Select(a =>
new SafetyDates
{
SafetyYearMonth = ((DateTime)a.YearMonth).ToString("yyyy MMM")
})
.AsQueryable();
}
protected override void Dispose(bool disposing)
{
if (disposing)
{
db.Dispose();
}
base.Dispose(disposing);
}
}
}
新控制器几乎是ReportDates控制器的复写本,但端点不会启动。(ReportDates仍然很有效…)有人能帮我解开这个吗?我宁愿不回到旧项目,把MVC页面拉出来放在另一个项目中,但如果这是唯一的方法,我会的。。。
关于我的问题的更多背景知识。自1996年以来,我一直从事微软产品的工作。我曾与Foxpro和VB6广泛合作,过去几年我一直在VC#工作。仍在追赶2013和2015 IDE的来龙去脉,追赶Web开发和MVC 4和5。我最近继承的项目没有最好的文档。(惊讶)。在为我创建的web应用程序添加代码时,我遵循了以下过程:进行更改。清洁项目。重建项目。清洁溶液。重建解决方案。在IDE中运行解决方案进行测试。这对于我构建的2个mvc网页来说效果很好。添加新的API后,我更改了过程,因为我不确定如何访问端点。我试着:做出改变。清洁项目。重建项目。清洁溶液。重新生成解决方案并得到意外结果。然后我打开Chrome单机版,访问了一个当前正在运行的API端点。这很好,但当我尝试上面创建的新端点时,我得到了上面的结果。最终,我尝试运行/更改现有的工作API,但发现我看不到任何更改。最后,我部署并发布了我的新解决方案,变化就显现出来了。我回到了上面的代码,部署并发布了我的新解决方案,新的端点做出了响应。我目前的问题是,当在一个解决方案(sharepoint解决方案和WEB MVC 4 PAGES/API)中的两个项目中进行更改时,查看IDE中发生的所有更改的最低流程是什么?我每次都必须部署和发布吗?如果部署总是必要的,为什么不将其作为发布过程的一部分?