2017-04-06 95 views
1

我在我的.NET Core MVC rest服務中創建了一個新的控制器,並且在我調用API時沒有路由到POST函數。.NET核心MVC控制器沒有路由到POST功能

我已經有了與這個格式完全相同的現有控制器,我無法確定爲什麼服務功能沒有被調用。該請求總是返回一個通用的500錯誤。

網址: https://address:port/api/TOSResponse

using System.Collections.Generic; 
using Microsoft.AspNetCore.Mvc; 
using MyProject.ActionFilters; 
using MyProject.Common.Exceptions; 
using MyProject.Services; 

namespace MyProject.Controllers 
{ 

    [ServiceFilter(typeof(KeyValidatorFilter))] 
    [Route("api/[controller]")] 
    public class TOSResponseController : Controller 
    { 

     private ITOSResponseService _tosResponseService; 

     public TOSResponseController(ITOSResponseService tosResponseService) 
     { 
      _tosResponseService = tosResponseService; 
     } 

     [HttpPost] 
     public IActionResult Post([FromBody] List<Models.TermsOfServiceResponse> tosResponses) 
     { 
      try 
      { 
       _tosResponseService.InsertOrUpdate(tosResponses); 
       return new OkResult(); 
      } 
      catch (PLException ex) 
      { 
       return new BadRequestObjectResult(ex.ErrorValue); 
      } 
     } 

    } 
} 
+0

你需要證明你正在使用的URL和ServiceFilter邏輯。 – mason

+0

哎呀,我會編輯答案 –

回答

1

問題可能存在於你已經添加爲ServiceFilter的KeyValidatorFilter。這將會首先受到攻擊,並可能在用戶擊中控制器之前將500回傳給用戶。你在其他控制器中使用了這個過濾器嗎?嘗試在調試模式下在過濾器中添加斷點並查看會發生什麼。

+0

這是我的想法,但它也沒有被擊中 –

1

我發現了這個問題。該控制器甚至沒有被實例化,因爲到ITOSResponseService參考無法得到解決,我忘了登記Startup.cs與在ConfigureServices功能IoC容器的服務:

public class Startup 
{ 
    //... 
    public void ConfigureServices(IServiceCollection services) 
    { 
     //... 
     services.AddTransient<ITOSResponseService, TOSResponseService>(); 
     //... 
    } 
    //... 
}