2014-04-18 1 views
0

그래서 내 서비스에 등록 할 사람들을위한 간단한 양식 인 "Register"보기 (RegisterController에 매핑 됨)가 있습니다. 폼의 메소드가 POST라는 것을 감안할 때, 컨트롤러의 액션 (폼을 보여주는 액션과 제출을받는 액션) 모두를 같은 이름으로 명명 할 수 있지만 [HttpPost] 속성을 통해 다음과 같이 구분합니다.[HttpPost] 속성을 사용하더라도 컨트롤러 동작 모호성? (ASP.NET MVC4)

open System 
open System.Web 
open System.Web.Mvc 
open System.Net 
open System.Threading 
open System.Configuration 

[<HandleError>] 
type RegisterController() = 
    inherit Controller() 

    member this.Index (guid: string) = 
     let model = new RegisterModel(guid) 
     this.View("Register", model) :> ActionResult 

    [<HttpPost>] 
    member this.Index 
     (guid: string, password: string, passwordRetry: string) = 
      if not (password.Equals(passwordRetry)) then 
       raise(new Exception("Passwords must be the same")) 
      WebDbAccess.SetNewPassword guid password 
      RedirectResult("/") :> ActionResult 

이것은 완벽하게 작동합니다.

그러나이 기능을 내 앱의 홈보기 (로그인 기능 용)에서 사용하려고 시도했지만 작동하지 않습니다. 그것은 이것을 던졌습니다 :

The current request for action 'Index' on controller type 'HomeController' is ambiguous between the following action methods: 
System.Web.Mvc.ActionResult Index(System.String, System.String) on type FsWeb.Controllers.HomeController 
System.Web.Mvc.ActionResult Index() on type FsWeb.Controllers.HomeController 
Description: An unhandled exception occurred during the execution of the current web request. Please review the stack trace for more information about the error and where it originated in the code. 

Exception Details: System.Reflection.AmbiguousMatchException: The current request for action 'Index' on controller type 'HomeController' is ambiguous between the following action methods: 
System.Web.Mvc.ActionResult Index(System.String, System.String) on type FsWeb.Controllers.HomeController 
System.Web.Mvc.ActionResult Index() on type FsWeb.Controllers.HomeController 

Source Error: 

An unhandled exception was generated during the execution of the current web request. Information regarding the origin and location of the exception can be identified using the exception stack trace below. 

Stack Trace: 


[AmbiguousMatchException: The current request for action 'Index' on controller type 'HomeController' is ambiguous between the following action methods: 
System.Web.Mvc.ActionResult Index(System.String, System.String) on type FsWeb.Controllers.HomeController 
System.Web.Mvc.ActionResult Index() on type FsWeb.Controllers.HomeController] 
    System.Web.Mvc.Async.AsyncActionMethodSelector.FindAction(ControllerContext controllerContext, String actionName) +495852 
    System.Web.Mvc.Async.ReflectedAsyncControllerDescriptor.FindAction(ControllerContext controllerContext, String actionName) +57 
    System.Web.Mvc.ControllerActionInvoker.FindAction(ControllerContext controllerContext, ControllerDescriptor controllerDescriptor, String actionName) +16 
    System.Web.Mvc.Async.AsyncControllerActionInvoker.BeginInvokeAction(ControllerContext controllerContext, String actionName, AsyncCallback callback, Object state) +114 
    System.Web.Mvc.<>c__DisplayClass1d.<BeginExecuteCore>b__17(AsyncCallback asyncCallback, Object asyncState) +30 
    System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130 
    System.Web.Mvc.Controller.BeginExecuteCore(AsyncCallback callback, Object state) +382 
    System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130 
    System.Web.Mvc.Controller.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +317 
    System.Web.Mvc.Controller.System.Web.Mvc.Async.IAsyncController.BeginExecute(RequestContext requestContext, AsyncCallback callback, Object state) +15 
    System.Web.Mvc.<>c__DisplayClass8.<BeginProcessRequest>b__2(AsyncCallback asyncCallback, Object asyncState) +71 
    System.Web.Mvc.Async.WrappedAsyncResult`1.Begin(AsyncCallback callback, Object state, Int32 timeout) +130 
    System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContextBase httpContext, AsyncCallback callback, Object state) +249 
    System.Web.Mvc.MvcHandler.BeginProcessRequest(HttpContext httpContext, AsyncCallback callback, Object state) +50 
    System.Web.Mvc.MvcHandler.System.Web.IHttpAsyncHandler.BeginProcessRequest(HttpContext context, AsyncCallback cb, Object extraData) +16 
    System.Web.CallHandlerExecutionStep.System.Web.HttpApplication.IExecutionStep.Execute() +301 
    System.Web.HttpApplication.ExecuteStep(IExecutionStep step, Boolean& completedSynchronously) +155 


Version Information: Microsoft .NET Framework Version:4.0.30319; ASP.NET Version:4.0.30319.17929 

2 가지 경우의 차이점은 무엇입니까? 나는 그것을 얻지 않는다.

HomeController의 구현은 다음과 같습니다

open System 
open System.Web 
open System.Web.Http 

[<HandleError>] 
type HomeController() = 
    inherit Controller() 

    [<HttpGet>] 
    member this.Index() = 
     this.View() :> ActionResult 

    [<HttpPost>] 
    member this.Index 
     (id:string, password:string) = 
      if (UserIsValid id password) then 
       RedirectResult("lobby") :> ActionResult 
      RedirectResult("loginError") :> ActionResult 
+0

HttpGet을 사용하여 다른 색인 작업을 꾸미고 사라지는 지 확인할 수 있습니까? – Dismissile

+0

참조하기 쉽도록 HomeController의 코드를 게시하십시오. – ntombela

+0

@Dismissile : 시도했으나 작동하지 않았습니다. – knocte

답변

1

@nemesv 잘했다, 나는 그렇지 않으면 System.Web.Http.HttpPost을 사용하기 때문에 완전히 System.Web.Mvc.HttpPostHttpPost을 한정했다!

관련 문제