Ошбки путей при минификации CSS средствами Bundle

Иногда бывает ситуация, когда в css используются пути относительные, и после минификации они перестают работать.

чтоб этого избежать можно сделать вот так:

bundles.Add(new StyleBundle("~/bundles/css/dashboard/black") { CdnPath = cdnPath + "bundles/css/dashboard/black" }
.Include("~/content/css/menusprites.css", new CssRewriteUrlTransform())
.Include("~/Content/kendo/kendo.common.min.css", new CssRewriteUrlTransform())
.Include("~/Content/kendo/kendo.dataviz.black.min.css", new CssRewriteUrlTransform())
.Include("~/Content/kendo/kendo.black.min.css", new CssRewriteUrlTransform()));

то есть использую другое правило CssRewriteUrlTransform

 

оригинал:

http://www.telerik.com/forums/asp-mvc-css-minification-breaks-kendo-bootstrap

Отладка JavaScript в ASP.NET MVC в Visual Studio

Для того чтобы отладить скрипты в Visual Studio нужно ставить Brake Point в скрипте с помощью ключевого слово

debugger;

Например:

function test(e) {
        if (e.keyCode == 13) {
            debugger;
        }
    }

 

Это вызовет отладку.

Стоит обратить внимание, что это работает только в том браузере который запустился студией для отладки.

Использование модулей в WebAPI

1. создать клас с хендлером

public class CustomHeaderHandler : DelegatingHandler
    {
        protected override Task<HttpResponseMessage> SendAsync(HttpRequestMessage request, CancellationToken cancellationToken)
        {
            request.Headers.Remove("Server");

            request.Headers.Add("Server", "WDAPI Server 4"); 
            return base.SendAsync(request, cancellationToken);
        }
    }

2.  добавить наш хендлер

            HttpConfiguration config = new HttpConfiguration();
            config.Routes.MapHttpRoute(
                name: "DefaultApi",
                routeTemplate: "api/{controller}/{action}/{id}",
                defaults: new { id = RouteParameter.Optional });

   

                //вот так можно добавляеть хендлеры для обратботки запросов на низком уровне
                config.MessageHandlers.Add(new CompressedRequestHandler());
                config.MessageHandlers.Add(new GZipToJsonHandler());
                config.MessageHandlers.Add(new CustomIHeaderHandler());
                app.UseWebApi(config);

 

ссылки:

http://www.asp.net/web-api/overview/web-api-clients/httpclient-message-handlers

http://www.asp.net/web-api/overview/hosting-aspnet-web-api/self-host-a-web-api

Инсталяция Windows Service и запуск с параметрами

В классе инсталлере проекта нужно добавить:

public partial class ProjectInstaller : System.Configuration.Install.Installer
{
	public ProjectInstaller()
	{
		this.InitializeComponent();
	}

	protected override void OnBeforeInstall(System.Collections.IDictionary savedState)
	{
		this.Context.Parameters["assemblypath"] = this.AppendPathParameter(Context.Parameters["assemblypath"], "-service");
		base.OnBeforeInstall(savedState);
	}

	protected override void OnBeforeUninstall(System.Collections.IDictionary savedState)
	{
		this.Context.Parameters["assemblypath"] = this.AppendPathParameter(Context.Parameters["assemblypath"], "-service");
		base.OnBeforeUninstall(savedState);
	}

	protected virtual string AppendPathParameter(string path, string parameter)
	{
		if (path.Length > 0 && path[0] != '"')
		{
			path = string.Format("\"{0}\"", path);
		}
		path += string.Format(" {0}", parameter);
		return path;
	}
}

SignalR работа с включенным сжатием GZip

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

<location path="signalr">
  <system.webServer>
    <urlCompression doDynamicCompression="false"/>
  </system.webServer>
</location>

Как заупсить IIS Express

В консоли надо выполнить
C:\>iisexpress /path:C:\MyWebSite /port:1234 

Или
C:\Program Files\IIS Express\iisexpress.exe /path:C:\MyWebSite /port:1234 

В зависимости от того где он установлен

Включить Gzip сжатие в ASP.NET и web.config

 <system.webServer>
    <httpCompression directory="%SystemDrive%\inetpub\temp\IIS Temporary Compressed Files">
      <scheme name="gzip" dll="%Windir%\system32\inetsrv\gzip.dll" staticCompressionLevel="9" dynamicCompressionLevel="4" />
      <dynamicTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="application/xml" enabled="true" />
        <add mimeType="application/atom" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/soap+xml" enabled="true" />
        <add mimeType="application/json" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="*/*" enabled="false" />
      </dynamicTypes>
      <staticTypes>
        <add mimeType="text/*" enabled="true" />
        <add mimeType="message/*" enabled="true" />
        <add mimeType="application/javascript" enabled="true" />
        <add mimeType="application/xml" enabled="true" />
        <add mimeType="application/atom" enabled="true" />
        <add mimeType="application/atom+xml" enabled="true" />
        <add mimeType="application/soap+xml" enabled="true" />
        <add mimeType="application/json" enabled="true" />
        <add mimeType="application/x-javascript" enabled="true" />
        <add mimeType="*/*" enabled="false" />
      </staticTypes>
    </httpCompression>
    <urlCompression doStaticCompression="true" doDynamicCompression="true" />
  </system.webServer>

Для настройки IIS  http://www.hanselman.com/blog/EnablingDynamicCompressionGzipDeflateForWCFDataFeedsODataAndOtherCustomServicesInIIS7.aspx

SignalR добавить header для Forms авторизации

Если у вас на сервере настроение Froms авторизация, а вы из клиента пытаетесь подключиться к сервису то обычно нужно добавить в заголовок запроса авторотационные Cookies.
Как это сделать
1. На сервере в Hub добавить авторизацию:

[Authorize]
[HubName("MyTestHub")]
public class TestHub : Hub
{
public TestHub()
{
int a = 5;
}
}

2. Каким-то образом получить заголовок авторизации
http://acroblog.acrovations.com/post/2013/03/22/Forms-авторизация-WCF-Data-Service.aspx
например как тут, в функции GetCookie

var hub = new HubConnection("http://localhost:5555/signalr");
hub.CookieContainer = new CookieContainer();
hub.CookieContainer.SetCookies(new Uri("http://localhost:5555/"), MyCookieHeader.Cookie);
var x = hub.CookieContainer.GetCookieHeader(new Uri("http://localhost:5555/"));
var cook = new Cookie("test", "test");
cook.Domain = "localhost";
cook.Path = "/";
hub.CookieContainer.Add(cook);
proxy = hub.CreateHubProxy("MyTestHub");
hub.Start().Wait();

все.
Главное добавить какой-то cookie чтобы было с чем заголовок отправлять.