2010-10-27 1 views
2

J'ai créé une vue ASP.NET MVC. Sur ma MVC WebApp, cela fonctionne très bien. Je voudrais être en mesure de (à partir d'une application de la console) rendre la vue sous la forme d'un e-mail HTML.Aide au rendu Vue ASP.NET MVC à partir d'une application console

Je me demande quelle est la meilleure façon de faire cela, la partie avec laquelle je me bats est Rendering the View.

Y a-t-il un moyen de le faire à partir d'une application de console? La webapp appelle simplement un service Web et formate les données de manière à ce que l'application console ait accès au même service Web; cependant, le paramètre ActionResult sur le contrôleur est protégé par les attributs [Authorize], donc tout le monde ne peut pas y accéder.

+0

est le défi rendu ou l'autorisation? – Aliostad

+0

Soit - si je dois utiliser WebRequest alors autoriser serait mon problème, car je ne peux pas envoyer des informations d'identification, puis-je? S'il y a un moyen plus clevor, comme l'ajout d'une référence à mon application mvc, alors le rendu serait le problème. Longue histoire courte, je ne sais pas par où commencer. – Nate

Répondre

0

Je fini par utiliser HttpWebRequest et les informations fournies ici: http://odetocode.com/articles/162.aspx

de l'article:

// first, request the login form to get the viewstate value 
    HttpWebRequest webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest;   
    StreamReader responseReader = new StreamReader(
     webRequest.GetResponse().GetResponseStream() 
    ); 
    string responseData = responseReader.ReadToEnd();   
    responseReader.Close(); 

    // extract the viewstate value and build out POST data 
    string viewState = ExtractViewState(responseData);  
    string postData = 
     String.Format(
      "__VIEWSTATE={0}&UsernameTextBox={1}&PasswordTextBox={2}&LoginButton=Login", 
      viewState, USERNAME, PASSWORD 
     ); 

    // have a cookie container ready to receive the forms auth cookie 
    CookieContainer cookies = new CookieContainer(); 

    // now post to the login form 
    webRequest = WebRequest.Create(LOGIN_URL) as HttpWebRequest; 
    webRequest.Method = "POST"; 
    webRequest.ContentType = "application/x-www-form-urlencoded"; 
    webRequest.CookieContainer = cookies;   

    // write the form values into the request message 
    StreamWriter requestWriter = new StreamWriter(webRequest.GetRequestStream()); 
    requestWriter.Write(postData); 
    requestWriter.Close(); 

    // we don't need the contents of the response, just the cookie it issues 
    webRequest.GetResponse().Close(); 

    // now we can send out cookie along with a request for the protected page 
    webRequest = WebRequest.Create(SECRET_PAGE_URL) as HttpWebRequest; 
    webRequest.CookieContainer = cookies; 
    responseReader = new StreamReader(webRequest.GetResponse().GetResponseStream()); 

    // and read the response 
    responseData = responseReader.ReadToEnd(); 
    responseReader.Close(); 

    Response.Write(responseData); 
2

Oui, vous pouvez. Je suppose que vous utilisez l'authentification par formulaire. Authentifiez-vous, récupérez le cookie de l'en-tête de session et copiez-le dans votre nouvelle requête Web.

+0

Je n'ai jamais fait ça auparavant, des ressources pour le faire? Est-ce que j'ajoute simplement un 'NetworkCredentials' à ma classe WebRequest? – Nate

+0

Uniquement si vous utilisez l'authentification Windows. – Aliostad

+0

J'utilise l'authentification par formulaire. Avec un attribut simple [Authorize] sur le ActionResult ... – Nate

Questions connexes