これは私の問題です。私は3つの部分を持つプロジェクトソリューションを継承しました。 Sharepointページプロジェクト、APIプロジェクト、SSISプロジェクト私は必要に応じて追加や学習をしていますが、今は指導が必要です。最近私は2つの標準MVC 4 WebページをWEB Apiプロジェクトに追加して2つの新しいテーブルをCRUDしました。その後、新しいWeb APIエンドポイントを追加して、新しいデータの一部をクエリして、新しい分析ページをSharepointプロジェクトに追加しました。私の問題は、どのようにルートを設定しても、エンドポイントに応答させることができないということです。ルーティング、Web API、ASP MVCを行うエンジンが2つ(またはそれ以上)あることがわかりました。私はこのプロジェクトで2つのスタイルを混在させてしまったというのが私の問題です。C#、ASP MVC 4、Web API、 "タイプがコントローラの名前と一致するものが見つかりませんでした。"
ここは私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ページを取り出して別のプロジェクトに入れることはしませんが、それが唯一の方法だとすればいいでしょう...
あなたが試しているURLは何ですか? – Shyju
https://internalSite.com/_metrics/api/safetydates:broken https://internalSite.com/_metrics/api/reportdates:works – MultiWolf