Почему мой проект MVC не будет работать после его публикации? - PullRequest
6 голосов
/ 03 июля 2010

Недавно я опубликовал свой первый проект MVC 2 на коммерческом веб-сервере, работающем под управлением Windows 2008 и предположительно поддерживающем другие сайты MVC, но у меня возникли некоторые проблемы.Вот структура высокого уровня проекта.Как вы можете видеть, это очень просто:

image

But, after the site is published, and I navigate to the URL, I get "HTTP Error 403.14 - Forbidden: The Web server is configured to not list the contents of this directory."

So, I contacted the web host about it and was told I had to include a default landing page, such as Default.aspx, Index.aspx, etc. I doubted this response was accurate because I thought MVC Routing would have taken care of this, but I did as suggested anyway, adding a redirect to my home controller in the Default.aspx.cs codebehind, but got an HTTP Error 404. I added that redirect per advice similar to that found in this article: http://www.58bits.com/blog/CommentView,guid,10b2ddfa-057c-41d0-bdc7-564b212ce896.aspx.

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

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

Ответы [ 5 ]

6 голосов
/ 03 июля 2010

Есть несколько вещей, которые могут вызывать ошибку:


Проблема с библиотеками MVC

На рабочем сервере могут отсутствовать библиотеки MVC, хранящиеся в GAC. Чтобы исправить это, все, что вам нужно сделать, это зайти в References панель / папку вашего проекта MVC и найти System.Web.Mvc, System.Web.Routing и System.Web.Abstractions. Теперь выберите их, нажав Ctrl , и установите для параметра Копировать локально значение true в окне свойств.

Трудно знать, прежде чем публиковать на сервере, так ли это, поэтому я рекомендую просто устанавливать сборки для постоянного копирования локально.


Целевая страница

У вашей целевой страницы могут быть проблемы. Из моего опыта работы с ASP.NET MVC я видел, что целевая страница необходима для правильной работы IIS. Я использую страницу, которая была включена в шаблон ASP.NET MVC 2. Вы должны сравнить мой с вашим, чтобы увидеть, есть ли у вас все, что нужно:

Default.aspx:

<%@ Page Language="C#" AutoEventWireup="true" CodeBehind="Default.aspx.cs" Inherits="YourNamespace._Default" %>

<%-- Please do not delete this file. It is used to ensure that ASP.NET MVC is activated by IIS when a user makes a "/" request to the server. --%>

Default.aspx.cs:

using System.Web;
using System.Web.Mvc;
using System.Web.UI;

namespace YourNamespace
{
    public partial class _Default : Page
    {
        public void Page_Load(object sender, System.EventArgs e)
        {
            // Change the current path so that the Routing handler can correctly interpret
            // the request, then restore the original path so that the OutputCache module
            // can correctly process the response (if caching is enabled).

            string originalPath = Request.Path;
            HttpContext.Current.RewritePath(Request.ApplicationPath, false);
            IHttpHandler httpHandler = new MvcHttpHandler();
            httpHandler.ProcessRequest(HttpContext.Current);
            HttpContext.Current.RewritePath(originalPath, false);
        }
    }
}

Права доступа

На основании первого полученного вами кода состояния HTTP может возникнуть проблема с разрешениями. Папка , содержащая ваше приложение MVC, должна быть определена как приложение и иметь соответствующие разрешения .

Довольно легко сделать обе эти вещи через IIS. Однако у вас, вероятно, нет доступа к IIS; если вы это сделаете, вам очень повезло!

В противном случае вы можете изменить разрешения через FTP с помощью команды chmod. Вы можете подключиться через Filezilla, очень хороший FTP-клиент с открытым исходным кодом, просто сделайте это через диалоговое окно + щелчок правой кнопкой мыши.

Что касается определения папки как приложения, вы должны проверить, можете ли вы сделать это с помощью любых вещей IIS, предоставленных вам хостом. Если нет, свяжитесь с ними и попросите их настроить.


Удачи! Надеюсь, я помог.

0 голосов
/ 23 декабря 2014

Следующий запрос отправлен: http://stackoverflow.com? VariableValue = 87

перенаправить страницу, используя значения переменных в строке запроса : -

Dim variableValue

variableValue = Request.QueryString ("Occassion")

если variableValue = 87, тогда

Response.Status = "301 перемещено навсегда"

Response.AddHeader "Location", "http://www.google.com"

конец, если

0 голосов
/ 04 июля 2010

Основываясь на комментариях и ответах выше, я закончил изучать сопоставление с подстановочными символами, спросив моего веб-хоста, поддерживают ли они это. Вот что я получил в ответ:

<ч />

Подстановочные знаки не поддерживаются нашими службами.

Если вы хотите использовать перезапись URL-адреса, что аналогично перенаправлению, используйте приведенный ниже пример.

Пример использования карты перезаписи URL, где следующий URL

/ default.aspx? Id = 1 будет заменено на /default.aspx?id=25

<rewrite>
<rewriteMaps>
<rewriteMap name="/default.aspx?id=1">
<add key="1" value="25" />
</rewriteMap>
</rewriteMaps>
<rules>
<rule name="Rewrite rule1 for /default.aspx?id=1">
<match url=".*" />
<conditions>
<add input="{/default.aspx?id=1:{REQUEST_URI}}" pattern="(.+)" />
</conditions>
<action type="Rewrite" url="{C:1}" appendQueryString="false" />
</rule>
</rules>
</rewrite>
  1. Если вы пытаетесь не переписать URL, а перенаправить URL, используйте приведенный ниже пример.

Для перенаправления вашего веб-сайта с помощью ASP создайте файл "default.asp".

Поместите следующий код внутри:

<%
Response.Status="301 Moved Permanently"
Response.AddHeader "Location","http://www.new-url.com/"
%>

Чтобы перенаправить ваш веб-сайт с помощью HTML:

<HTML><HEAD>
<META HTTP-EQUIV=Pragma Content="No-Cache">
<META HTTP-EQUIV=Refresh Content="5;URL=http://YOURURLWHEREYOUWANTTOREDIRECT">
</HEAD>
<ч />

Будет ли работать хоть что-то из вышеперечисленного? Серьезно, стоит ли так сложно опубликовать проект MVC? Я действительно начинаю расстраиваться ... :(

Должен ли я просто искать нового веб-хостинга? Будет ли это иметь значение?

0 голосов
/ 03 июля 2010

Попробуйте предварительно скомпилировать приложение .В Visual Studio настройте проект развертывания, а затем разверните его в режиме выпуска.

Поскольку он предварительно скомпилирован, вы не полагаетесь на IIS, чтобы скомпилировать проект для его запуска.Это то, что я всегда делаю в наши дни, так как IIS на рабочем сервере может причинять боль, если мне нужно заставить его перекомпилировать или обновить ..

0 голосов
/ 03 июля 2010

Возможно, в вашем производственном IIS нет справочных файлов MVC, загруженных для вашего сайта.Я столкнулся с той же проблемой, когда загружал сайт MVC на хост, который говорил: «Мы полностью поддерживаем MVC».Вы можете попробовать опубликовать, используя опцию «все файлы проекта».Я считаю, что проблему также можно решить, перейдя в папку ссылок и выбрав ссылки на mvc.Я сейчас не на своей машине разработчика, но, полагаю, вы измените определенное свойство для ссылок, чтобы они были включены в опубликованные файлы.

...