Из Документов:
Режим HTML5
Серверная сторона
Используя это режим требует перезаписи URL-адресов на стороне сервера, в основном вы должны переписать все свои ссылки на точку входа вашего приложения (например, index.html). Требование к тегу
также важно для этого случая, так как позволяет AngularJS различать часть URL-адреса, которая является базой приложения, и путь, который должен обрабатывать приложение.
- Руководство разработчика AngularJS - Использование $ location (сторона сервера HTML5)
blockquote>Для NodeJS и ExpressJS
var express = require('express'); var path = require('path'); var router = express.Router(); // serve angular front end files from root path router.use('/', express.static('app', { redirect: false })); // rewrite virtual urls to angular app to enable refreshing of internal pages router.get('*', function (req, res, next) { res.sendFile(path.resolve('app/index.html')); }); module.exports = router;
Для IIS в Windows
См., Как настроить IIS для URL-адреса Переписывание приложения AngularJS в режиме HTML5?
Для apache
RewriteEngine On RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -f [OR] RewriteCond %{DOCUMENT_ROOT}%{REQUEST_URI} -d RewriteRule ^ - [L] RewriteRule ^
] См. Как переписать url в apache htaccess для приложения angularjs
Для получения дополнительной информации
Статья: AngularJS - Включить страницу режима HTML5 Обновить без 404 Ошибки в NodeJS и IIS .
Структура представляет собой структуру с переменным размером, которая не может автоматически сортироваться. Вам нужно будет сделать это самостоятельно.
Вам нужно удалить тип SP_DEVICE_INTERFACE_DETAIL_DATA
. Это бесполезно для вас. Измените объявление SetupDiGetDeviceInterfaceDetail
на:
[DllImport(@"setupapi.dll", CharSet = CharSet.Auto, SetLastError = true)]
public static extern Boolean SetupDiGetDeviceInterfaceDetail(
IntPtr hDevInfo,
SP_DEVICE_INTERFACE_DATA deviceInterfaceData,
IntPtr deviceInterfaceDetailData,
uint deviceInterfaceDetailDataSize,
out uint requiredSize,
SP_DEVINFO_DATA deviceInfoData
);
Пропустите IntPtr.Zero
при первом вызове SetupDiGetDeviceInterfaceDetail
. Затем выделите буфер требуемого размера, вызвав Marshal.AllocHGlobal
. Затем напишите размер в первые 4 байта этого буфера. Затем снова вызовите SetupDiGetDeviceInterfaceDetail
.
Что-то в этих строках:
bool result3 = Win32.SetupDiGetDeviceInterfaceDetail(hDevInfo, ifData, IntPtr.Zero, 0,
out needed, null);
if(!result3)
{
int error = Marshal.GetLastWin32Error();
}
// expect that result3 is false and that error is ERROR_INSUFFICIENT_BUFFER = 122,
// and needed is the required size
IntPtr DeviceInterfaceDetailData = Marshal.AllocHGlobal((int)needed);
try
{
uint size = needed;
Marshal.WriteInt32(DeviceInterfaceDetailData, (int)size);
bool result4 = Win32.SetupDiGetDeviceInterfaceDetail(hDevInfo, ifData,
DeviceInterfaceDetailData, size, out needed, null);
if(!result4)
{
int error = Marshal.GetLastWin32Error();
}
// do whatever you need with DeviceInterfaceDetailData
}
finally
{
Marshal.FreeHGlobal(DeviceInterfaceDetailData);
}