Почему мой проект MVC не будет работать после публикации его?

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

Но, после того, как сайт публикуется, и я перешел к URL, я получаю "Ошибку HTTP 403.14 - Запрещенный: веб-сервер настроен для не списка содержания этого каталога".

Так, я связался с веб-хостом об этом и был сказан, что должен был включать целевую страницу по умолчанию, такую как Default.aspx, Index.aspx, и т.д. Я сомневался, что этот ответ был точен, потому что я думал, что Маршрутизация MVC будет заботиться об этом, но я сделал, как предложено так или иначе, добавив перенаправление к моему домашнему контроллеру в Default.aspx.cs codebehind, но получил Ошибку HTTP 404. Я добавил что перенаправление на совет, подобный найденному в этой статье: http://www.58bits.com/blog/CommentView,guid,10b2ddfa-057c-41d0-bdc7-564b212ce896.aspx.

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

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

6
задан Community 8 February 2017 в 14:27
поделиться

4 ответа

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


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

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

Перед публикацией на сервере сложно понять, так ли это на самом деле, поэтому я рекомендую просто настроить сборки на постоянное локальное копирование.


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

На вашей целевой странице могут быть проблемы. Из моего опыта работы с 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, предоставленных вам хостом. Если нет, свяжитесь с ними и попросите настроить его.


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

6
ответ дан 17 December 2019 в 02:21
поделиться

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

0
ответ дан 17 December 2019 в 02:21
поделиться

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

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

0
ответ дан 17 December 2019 в 02:21
поделиться

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


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

Если вы хотите использовать переписывание 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
ответ дан 17 December 2019 в 02:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: