爲了支持性原因,我將.Net Core與ReactJs之間的應用程序移植到.Net MVC。將.NET核心應用程序移植到MVC後發生錯誤
這也使用Redux進行狀態處理。
這似乎是好的,但由於某種原因,WebAPI調用都會失敗,並出現404錯誤。
我很確定路由是正確的,根據失敗的調用,但顯然有東西在某處丟失。
作爲入口點添加的默認MVC控制器工作正常,它只是移植的WebAPI控制器似乎失敗。
我不能張貼出於商業原因全部代碼,但是這是控制器和有關的行動之一是這樣的:
namespace Api.Controllers
{
/// <summary>
/// Account management.
/// </summary>
[Authorize]
[System.Web.Http.RoutePrefix("api/account")]
public class AccountController : ApiController
{
// <snip>
/// <summary>
/// Current logged in account.
/// </summary>
// GET api/Account/UserInfo
[HostAuthentication(DefaultAuthenticationTypes.ExternalBearer)]
[System.Web.Http.Route("userinfo")]
public async Task<UserInfoViewModel> GetUserInfo()
{
ExternalLoginData externalLogin = ExternalLoginData.FromIdentity(User.Identity as ClaimsIdentity);
var userName = User.Identity.GetUserName();
var account = new AccountRepresentation(await _context
.Accounts
.SingleOrDefaultAsync(acc => acc.Email == userName));
return new UserInfoViewModel
{
Account = account,
UserName = User.Identity.GetUserName(),
Email = User.Identity.GetUserName(),
HasRegistered = externalLogin == null,
LoginProvider = externalLogin != null ? externalLogin.LoginProvider : null,
Roles = await UserManager.GetRolesAsync(User.Identity.GetUserName())
};
}
// </snip>
}
}
(剪斷由我添加的註釋)
注意路由屬性 - 當我嘗試所有的事情時,它有點超過頂部,但據我所知,這應該沒問題。 然而,在瀏覽器控制檯,我看到的是:
無法加載資源:服務器與404 (未找到)狀態迴應http://localhost:49690/api/account/userinfo
的端口號是正確的默認的控制器,所以除非由於某種原因它與其他控制器不同,否則這應該是好的。
我一直在玩的RouteConfig.cs
文件目前看起來如下:
namespace Api
{
public class RouteConfig
{
public static void RegisterRoutes(RouteCollection routes)
{
routes.IgnoreRoute("{resource}.axd/{*pathInfo}");
routes.MapMvcAttributeRoutes();
routes.MapRoute(
name: "Default",
url: "{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "Api.Controllers" }
).DataTokens.Add("area", "UI");
routes.MapRoute(
name: "api",
url: "api/{controller}/{action}/{id}",
defaults: new { controller = "Home", action = "Index", id = UrlParameter.Optional },
namespaces: new[] { "Api.Controllers" }
).DataTokens.Add("area", "UI");
}
}
}
的WebApiConfig
文件如下所示:
namespace Api
{
public static class WebApiConfig
{
public static void Register(HttpConfiguration config)
{
// Web API routes
config.MapHttpAttributeRoutes();
config.Routes.MapHttpRoute(
name: "DefaultApi",
routeTemplate: "api/{controller}/{id}",
defaults: new { id = RouteParameter.Optional }
);
// Web API configuration and services
// Web API routes
// config.MapHttpAttributeRoutes();
// Configure Web API to use only bearer token authentication.
// config.SuppressDefaultHostAuthentication();
// config.Filters.Add(new HostAuthenticationFilter(OAuthDefaults.AuthenticationType));
//config.Formatters.JsonFormatter.SerializerSettings.ReferenceLoopHandling = Newtonsoft.Json.ReferenceLoopHandling.Ignore;
//config.Routes.MapHttpRoute(
// name: "DefaultApi",
// routeTemplate: "api/{controller}/{id}",
// defaults: new { id = RouteParameter.Optional }
//);
}
}
}
Application_Start()
是這樣的:
namespace Api
{
public class WebApiApplication : System.Web.HttpApplication
{
protected void Application_Start()
{
AreaRegistration.RegisterAllAreas();
//UnityConfig.RegisterComponents();
GlobalConfiguration.Configure(WebApiConfig.Register);
FilterConfig.RegisterGlobalFilters(GlobalFilters.Filters);
RouteConfig.RegisterRoutes(RouteTable.Routes);
BundleConfig.RegisterBundles(BundleTable.Bundles);
log4net.Config.XmlConfigurator.Configure();
}
}
}
還有什麼可能會丟失或錯誤,我是否阻止發現API操作?
(讓我知道如果任何其他代碼將是有益的)
其他詳情:
的Visual Studio版本:2015年企業更新3
.NET版本:4.6.1
到目前爲止沒有任何工作。我現在正考慮從頭開始一個新項目,並一次將代碼添加到一個控制器中。 – CompanyDroneFromSector7G