2010-10-27 2 views
2

Я создал ASP.NET MVC View. На моем MVC WebApp он отлично работает.Help Rendering ASP.NET MVC View from the Console App

Я хотел бы иметь возможность (из консольного приложения) визуализировать View как HTML-адрес электронной почты. Мне интересно, какой лучший способ сделать это будет, часть, с которой я борюсь, - это рендеринг вида.

Есть ли способ сделать это из консольного приложения?

Webapp просто вызывает веб-сервис и форматирует данные, так что консольное приложение будет иметь доступ к одному и тому же веб-сервису; однако ActionResult на контроллере защищен атрибутами [Authorize], поэтому не только каждый может получить на него.

+0

ли проблема с отображением или разрешать? – Aliostad

+0

Либо - если мне нужно использовать WebRequest, то авторизация будет моей проблемой, потому что я не могу просто отправлять учетные данные, могу ли я? Если есть больше способов clevor, например добавление ссылки на мое mvc-приложение, то это будет проблемой. Короче говоря, я не знаю, с чего начать. – Nate

ответ

0

Я закончил с использованием HttpWebRequest и информацию, представленную здесь: http://odetocode.com/articles/162.aspx

Из статьи:

// 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

Да, вы можете. Я предполагаю, что вы используете проверку подлинности на основе форм. Просто выполните проверку подлинности, возьмите куки-файл заголовка сеанса и скопируйте его на новый веб-запрос.

+0

Я никогда не делал этого раньше, никаких ресурсов на это? Я просто добавляю «NetworkCredentials» в свой класс WebRequest? – Nate

+0

Только если вы используете проверку подлинности Windows. – Aliostad

+0

Я использую проверку подлинности с помощью форм. С равным атрибутом [Авторизовать] на ActionResult ... – Nate