Я недавно опубликовал свой первый проект 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 для моей объединенной хостинговой компании, тысячу раз закончено, я надеюсь, что можно помочь мне работать к разрешению здесь, таким образом, я могу успешно опубликовать свой проект и получить доступ к нему без ошибки.
Есть несколько причин, которые могут вызвать ошибку:
На производственном сервере библиотеки 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, предоставленных вам хостом. Если нет, свяжитесь с ними и попросите настроить его.
Удачи! Надеюсь, я помог.
Возможно, в вашем производственном IIS не загружены справочные файлы MVC для вашего сайта. Я столкнулся с той же проблемой, когда загрузил сайт MVC на хост, который сказал: «Мы полностью поддерживаем MVC». Вы можете попробовать опубликовать с помощью опции «все файлы проекта». Я считаю, что проблему также можно решить, зайдя в папку с вашими ссылками и выбрав ссылки mvc. Я сейчас не на своей машине разработчика, но я считаю, что вы изменили определенное свойство для ссылок, чтобы они были включены в ваши опубликованные файлы.
Попробуйте предварительно скомпилировать ваше приложение . В Visual Studio настройте проект развертывания, а затем разверните его в режиме выпуска.
Поскольку он предварительно скомпилирован, вы не полагаетесь на IIS для компиляции проекта для его запуска. Это то, что я всегда делаю в наши дни, поскольку IIS на производственном сервере может стать проблемой, если мне нужно принудительно перекомпилировать или обновить его ..
Основываясь на комментариях и ответах выше, я решил изучить отображение приложений в виде диких символов, спросив у своего хостера, поддерживают ли они это. Вот что я получил в ответ:
Сопоставление подстановочных знаков не поддерживается нашими службами.
Если вы хотите использовать переписывание 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>
Для перенаправления вашего сайта с помощью 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? Я действительно начинаю расстраиваться... :(
Может мне просто поискать нового хостера? Это что-то изменит?