Hasan
Hasan

Reputation: 3

How to call an MVC action from a console app with no View

I am trying to post a string value to a method within a controller. My controller has no views. Is it possible to call and post this action method from a console application?

I have tried a few solution from stack overflow.

code in console app:

                HttpWebRequest webRequest = (HttpWebRequest)WebRequest.Create("http://localhost:6586/MacCommService/LoadBalanceMacValues");
            webRequest.Method = "POST";
            var data = string.Format("jsonValues={0}", Uri.EscapeDataString(encryptedJson));
            StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream());
            requestWriter.Write(data);
            requestWriter.Close();

code in MacCommServiceController:

        public ActionResult LoadBalanceMacValues(string jsonValues) {
        //var macKey = ConfigurationManager.AppSettings["macKey"].ToString();
        jsonValues = "etc";

        Response.Write("Json from action: " + jsonValues);
        return View();
    }

Upvotes: 0

Views: 1611

Answers (1)

teo van kot
teo van kot

Reputation: 12491

I gess you don't set ContentType of your httpWebRequest and don't format your Json well:

var httpWebRequest = (HttpWebRequest)WebRequest.Create("http://localhost:6586/MacCommService/LoadBalanceMacValues");
httpWebRequest.ContentType = "application/json";
httpWebRequest.Method = "POST";

using (var streamWriter = new StreamWriter(httpWebRequest.GetRequestStream()))
{
    string json = "{ \"jsonValues\" : \"" + Uri.EscapeDataString(encryptedJson) + "\" }";
    streamWriter.Write(json);
    streamWriter.Flush();
    streamWriter.Close();
}

var httpResponse = (HttpWebResponse)httpWebRequest.GetResponse();
using (var streamReader = new StreamReader(httpResponse.GetResponseStream()))
{
    var result = streamReader.ReadToEnd();
}

Also in your controller you should return Json like this:

public JsonResult LoadBalanceMacValues(string jsonValues) {
    jsonValues = "etc";
    return Json("Json from action: " + jsonValues);
}

Upvotes: 2

Related Questions