Xamarin ASP mvc 4 action with parameters not worki

2020-06-03 06:28发布

问题:

I have these actions:

public class HomeController : Controller
    {
        public ActionResult Index ()
        {
            ViewData ["Message"] = "Welcome to ASP.NET MVC on Mono!";
            return View ();
        }


        public ActionResult Pages (string test)
        {
            ViewBag.Message = test;
            return View ();
        }


    }

The pages action is not working. I get an error 500:

System.TypeLoadException
Could not load type 'System.Web.UnvalidatedRequestValuesBase' from assembly 'System.Web, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b03f5f7f11d50a3a'.

Description: HTTP 500.Error processing request.

Details: Non-web exception. Exception origin (name of application or object): System.Web.Mvc.
Exception stack trace:
at System.Web.Mvc.FormValueProviderFactory.GetValueProvider (System.Web.Mvc.ControllerContext controllerContext) [0x00000] in <filename unknown>:0 at System.Web.Mvc.ValueProviderFactoryCollection.GetValueProvider (System.Web.Mvc.ControllerContext controllerContext) [0x00000] in <filename unknown>:0 at System.Web.Mvc.ControllerBase.get_ValueProvider () [0x00000] in <filename unknown>:0 at System.Web.Mvc.ControllerActionInvoker.GetParameterValue (System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ParameterDescriptor parameterDescriptor) [0x00000] in <filename unknown>:0 at System.Web.Mvc.ControllerActionInvoker.GetParameterValues (System.Web.Mvc.ControllerContext controllerContext, System.Web.Mvc.ActionDescriptor actionDescriptor) [0x00000] in <filename unknown>:0 at System.Web.Mvc.Async.AsyncControllerActionInvoker+<>c__DisplayClass21.<BeginInvokeAction>b__19 (System.AsyncCallback asyncCallback, System.Object asyncState) [0x00000] in <filename unknown>:0 

If I remove the parameter from that action is working fine.

Any ideas?

Thanks in advance!

p.s. I don't have any routes defined yet.

回答1:

Using newest mono(3.6.1) doesn't resolve issue. What helps is: If you're using 5.X NuGet Microsoft ASP.NET MVC package, downgrade to MVC 4 is required.

Steps:

  1. Uninstall following NuGet packages(order is important):
    • Microsoft.AspNet.WebPages
    • Microsoft.AspNet.Razor
    • Microsoft.AspNet.Mvc
  2. Install Microsoft ASP.NET MVC 4 NuGet package.

Errors that may occur:

  • The view 'Index' or its master was not found.
    • Solution - change version of System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc in /Views/Web.Config in factoryType attribute of host node to 4.0.0.0. So line looks like this:

<host factoryType="System.Web.Mvc.MvcWebRazorHostFactory, System.Web.Mvc, Version=4.0.0.0, Culture=neutral, PublicKeyToken=31BF3856AD364E35" />

  • System.InvalidOperationException Conflicting versions of ASP.NET Web Pages detected: specified version is “3.0.0.0”, but the version in bin is “2.0.0.0”. To continue, remove files from the application’s bin directory or remove the version specification in web.config.
    • Solution - change webpages:Version to 2.0.0.0 in Root directory/Web.Config so it looks like this: <add key=”webpages:Version” value=”2.0.0.0” />

Then you can use parameters in controller actions.



回答2:

This is embarrassing, but here is my workaround until Mono updates System.Web:

public ActionResult Index() //string app_id, string session_id, int surah_id, int ayat_id)
{
    string app_id = Request["app_id"];
    string session_id = Request["session_id"];
    int surah_id = Int32.Parse(Request["surah_id"]);
    int ayat_id = Int32.Parse(Request["ayat_id"]);

    // ...
}


回答3:

I got the same error as OP in my MVC-project. (Currently using Xamarin on a Mac) I'm using Microsoft Exchange WebServices, and I found out that downgrading this package solved my problem. I downgraded the Microsoft.Exchange.Webservices package from 2.2 to 1.2.