Это мой самый первый пост на этом сайте.
В последние дни я пытался понять это, но не повезло.
У меня есть приложение aspnet core 2.1 с angular, и оно отлично работает на моей локальной машине (я знаю, это звучит очень знакомо). Я опубликовал его и положил на сервер, где установлен IIS. Пока все хорошо.
Проблема в том, что перед размещением на IIS я решил отладить его с IIS-сервера с помощью dotnet sdk, запустив nameofapp.exe в командной строке. Я получаю сообщение «сейчас слушаю http://localhost:5000"», который является хостом по умолчанию при отладке, и я не получаю никаких ошибок.
Теперь, когда я делаю запрос на http://localhost:5000, я получаю только сообщение «Загрузка» из файла index.html.
Я пробовал так много вещей, ни одна из них не сработала; Я даже думаю запустить приложение с нуля и публиковать его понемногу (я знаю, это не лучшая вещь). Одно из решений, которое я нашел и которое, я действительно думал, сработало, - это изменение базового href в index.html с "/" на "", но оно не сработало. Я изменил его на "./" и на "." но ничего.
Вот некоторые файлы приложения на угловой стороне. Все еще находится на ранних стадиях. Есть только 2 компонента (app.component) и (nav-menu.component). Единственное, что делает app.component - это вызывает компонент nav-menu. Компонент nav-menu имеет множество функций, которые на самом деле не актуальны, просто хочу показать, как структурировано приложение. Я также включаю файл app.module.ts и index.html.
app.component.ts:
import { Component } from '@angular/core';
@Component({
selector: 'app-root',
templateUrl: './app.component.html',
styleUrls: ['./app.component.css']
})
export class AppComponent{
title = 'app';
}
app.component.html:
<nav-menu></nav-menu>
СЧА menu.component.ts:
import { Component, OnInit, ViewChild } from '@angular/core';
import { BreakpointObserver, Breakpoints, BreakpointState } from '@angular/cdk/layout';
import { Observable } from 'rxjs';
import { RefillService } from './refill.service';
import { RefillModel } from './refill.model';
import { MatTableDataSource, MatPaginator, MatSort, MatSnackBar } from "@angular/material";
import { SelectionModel } from '@angular/cdk/collections';
@Component({
selector: 'nav-menu',
templateUrl: './nav-menu.component.html',
styleUrls: ['./nav-menu.component.css']
})
export class NavMenuComponent {
@ViewChild(MatPaginator) paginator: MatPaginator;
@ViewChild(MatSort) sort: MatSort;
addOrdersButtonDisabled: boolean = true;
submitOrdersButtonDisabled: boolean = true;
dataLoadingProgress: boolean = true;
rowsIndex: number;
refillOrderCount: number;
orderRefillsIndex: number;
rows: RefillModel[] = [];
orderRefills: RefillModel[] = [];
title = 'app';
refill: RefillModel;
dataSource;
dataSourceOrderQueue;
emptyDatasource = [];
displayedColumns: string[] = ['select', 'doctorFullName', 'patientFullName', 'patientDateOfBirth', 'medicationName', 'writtenQuantity', 'refillsLeft', 'writtenDate', 'submitDate', 'lastOrderLineStatus', 'lastRefillDate', 'directions'];
emptyDatasourceOrderQueue = [];
displayedColumnsOrderQueue: string[] = ['delete', 'doctorFullName', 'patientFullName', 'medicationName']
selection = new SelectionModel<RefillModel>(true, []);
isHandset: Observable<BreakpointState> = this.breakpointObserver.observe(Breakpoints.Handset);
constructor(private breakpointObserver: BreakpointObserver, private service: RefillService, public snackbar: MatSnackBar) { }
ngOnInit() {
this.getRefills();
}
getRefills() {
this.service.getRefills().subscribe(data => {
this.refill = data.json();
this.dataSource = new MatTableDataSource(data.json());
this.dataSource.paginator = this.paginator;
this.dataSource.sort = this.sort;
this.dataLoadingProgress = false;
});
}
initializeOrderQueueTable() {
this.dataSourceOrderQueue = new MatTableDataSource(this.emptyDatasourceOrderQueue);
}
isAllSelected() {
const numSelected = this.selection.selected.length;
const numRows = this.dataSource.data.length;
return numSelected === numRows;
}
/** Selects all rows if they are not all selected; otherwise clear selection. */
masterToggle() {
this.isAllSelected() ?
this.selection.clear() :
this.dataSource.data.forEach(row => this.selection.select(row));
}
applyFilter(filterValue: string) {
this.dataSource.filter = filterValue.trim().toLowerCase();
if (this.dataSource.paginator) {
this.dataSource.paginator.firstPage();
}
}
getValues(row: RefillModel, selectedRow: boolean) {
this.rowsIndex = this.rows.indexOf(row);
if (!selectedRow) {
if (this.rowsIndex === -1) {
this.rows.push(row);
this.orderRefills.push(row);
}
}
else {
if (this.rowsIndex !== -1) {
this.rows.splice(this.rowsIndex, 1);
this.orderRefills.splice(this.rowsIndex, 1);
}
}
}
deleteOrder(element: any) {
this.orderRefillsIndex = this.orderRefills.indexOf(element);
this.orderRefills.splice(this.orderRefillsIndex, 1);
this.rows.splice(this.orderRefillsIndex, 1);
this.dataSourceOrderQueue = new MatTableDataSource(this.orderRefills);
// console.log(element);
}
AddSelectedRefillsToQueue() {
this.dataSourceOrderQueue = new MatTableDataSource(this.orderRefills);
this.selection.clear();
}
submitSelectedRefills() {
this.service.submitRefills(this.orderRefills).subscribe(response => console.log(response));
this.snackbar.open('Refill Order(s) Submitted', '', {
duration: 3000
});
}
}
нав-menu.component.html
<mat-sidenav-container class="sidenav-container">
<mat-sidenav
#drawer
class="sidenav"
fixedInViewport="true"
[attr.role]="isHandset ? 'dialog' : 'navigation'"
[mode]="(isHandset | async)!.matches ? 'over' : 'side'"
[opened]="!(isHandset | async)!.matches">
<mat-toolbar color="primary">Pharmacy Refills</mat-toolbar>
<mat-nav-list>
<!-- <a mat-list-item routerLinkActive="active" href="">Active Refills</a> -->
<a mat-list-item routerLinkActive="active" href="#">Inactive Refills</a>
<a mat-list-item routerLinkActive="active" href="#">Orders Submitted</a>
</mat-nav-list>
</mat-sidenav>
<mat-sidenav-content>
<mat-toolbar color="primary">
<button
type="button"
aria-label="Toggle sidenav"
mat-icon-button
(click)="drawer.toggle()"
*ngIf="(isHandset | async)!.matches">
<mat-icon aria-label="Side nav toggle icon">menu</mat-icon>
</button>
<span>Active Refills</span>
</mat-toolbar>
<mat-card>
<mat-card-content>
<mat-form-field>
<input matInput (keyup)="applyFilter($event.target.value)" placeholder="Filter">
</mat-form-field>
<table mat-table [dataSource]="dataSource">
<!-- Checkbox Column -->
<ng-container matColumnDef="select">
<th mat-header-cell *matHeaderCellDef>
Select
</th>
<td mat-cell *matCellDef="let row">
<mat-checkbox (click)="$event.stopPropagation()"
(change)="$event ? selection.toggle(row) : null"
[checked]="selection.isSelected(row)"
(click)="getValues(row,selection.isSelected(row))"
>
</mat-checkbox>
</td>
</ng-container>
<ng-container matColumnDef="doctorFullName">
<th mat-header-cell *matHeaderCellDef> Prescriber </th>
<td mat-cell *matCellDef="let element"> {{element.doctorFullName}} </td>
</ng-container>
<ng-container matColumnDef="patientFullName">
<th mat-header-cell *matHeaderCellDef> Patient </th>
<td mat-cell *matCellDef="let element"> {{element.patientFullName}} </td>
</ng-container>
<ng-container matColumnDef="patientDateOfBirth">
<th mat-header-cell *matHeaderCellDef> Patient DOB </th>
<td mat-cell *matCellDef="let element"> {{element.patientDateOfBirth | date:'shortDate'}} </td>
</ng-container>
<ng-container matColumnDef="medicationName">
<th mat-header-cell *matHeaderCellDef> Medication </th>
<td mat-cell *matCellDef="let element"> {{element.medicationName}} </td>
</ng-container>
<ng-container matColumnDef="writtenQuantity">
<th mat-header-cell *matHeaderCellDef> Quantity </th>
<td mat-cell *matCellDef="let element"> {{element.writtenQuantity}} </td>
</ng-container>
<ng-container matColumnDef="refillsLeft">
<th mat-header-cell *matHeaderCellDef> Refills Remaining </th>
<td mat-cell *matCellDef="let element"> {{element.refillsLeft}} </td>
</ng-container>
<ng-container matColumnDef="writtenDate">
<th mat-header-cell *matHeaderCellDef> Start Date </th>
<td mat-cell *matCellDef="let element"> {{element.writtenDate | date:'shortDate' }} </td>
</ng-container>
<ng-container matColumnDef="submitDate">
<th mat-header-cell *matHeaderCellDef> Last Order Date </th>
<td mat-cell *matCellDef="let element"> {{element.submitDate | date:'shortDate' }} </td>
</ng-container>
<ng-container matColumnDef="lastOrderLineStatus">
<th mat-header-cell *matHeaderCellDef> Last Order Status </th>
<td mat-cell *matCellDef="let element"> {{element.lastOrderLineStatus}} </td>
</ng-container>
<ng-container matColumnDef="lastRefillDate">
<th mat-header-cell *matHeaderCellDef> Last Refill Date </th>
<td mat-cell *matCellDef="let element"> {{element.lastRefillDate | date:'shortDate' }} </td>
</ng-container>
<ng-container matColumnDef="directions">
<th mat-header-cell *matHeaderCellDef> Directions </th>
<td mat-cell *matCellDef="let element"> {{element.directions }} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumns"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumns;"
(click)="selection.toggle(row)"></tr>
</table>
<div *ngIf="dataLoadingProgress">
<mat-progress-bar mode="query">
</mat-progress-bar>
</div>
</mat-card-content>
<mat-paginator [pageSizeOptions]="[5, 10, 20]" showFirstLastButtons></mat-paginator>
<button mat-raised-button color="primary" (click)="AddSelectedRefillsToQueue()">Add Refill Orders to Queue</button>
</mat-card>
<mat-card>
<mat-card-header>
<h3>Refill Order Queue</h3>
</mat-card-header>
<mat-card-content>
<table mat-table [dataSource]="dataSourceOrderQueue">
<ng-container matColumnDef="delete">
<th mat-header-cell *matHeaderCellDef> </th>
<td mat-cell *matCellDef="let element">
<button
type="button"
mat-icon-button
(click)="deleteOrder(element)"><mat-icon>delete</mat-icon>
</button>
</td>
</ng-container>
<ng-container matColumnDef="doctorFullName">
<th mat-header-cell *matHeaderCellDef> Prescriber </th>
<td mat-cell *matCellDef="let element"> {{element.doctorFullName}} </td>
</ng-container>
<ng-container matColumnDef="patientFullName">
<th mat-header-cell *matHeaderCellDef> Patient </th>
<td mat-cell *matCellDef="let element"> {{element.patientFullName}} </td>
</ng-container>
<ng-container matColumnDef="medicationName">
<th mat-header-cell *matHeaderCellDef> Medication </th>
<td mat-cell *matCellDef="let element"> {{element.medicationName}} </td>
</ng-container>
<tr mat-header-row *matHeaderRowDef="displayedColumnsOrderQueue"></tr>
<tr mat-row *matRowDef="let row; columns: displayedColumnsOrderQueue;"
></tr>
</table>
</mat-card-content>
<button mat-raised-button color="primary" (click)="submitSelectedRefills()">Submit Refill Orders</button>
</mat-card>
</mat-sidenav-content>
</mat-sidenav-container>
app.module.ts
import { BrowserModule } from '@angular/platform-browser';
import { NgModule } from '@angular/core';
import { FormsModule } from '@angular/forms';
import { HttpClientModule, HttpClient } from '@angular/common/http';
import { HttpModule } from '@angular/http';
import { RouterModule } from '@angular/router';
import { AppComponent } from './app.component';
import { LayoutModule } from '@angular/cdk/layout';
import { BrowserAnimationsModule } from '@angular/platform-browser/animations';
import { MatCardModule,MatSnackBarModule,MatProgressBarModule,MatInputModule,MatSelectModule,MatProgressSpinnerModule,MatToolbarModule,MatFormFieldModule,MatButtonModule, MatSidenavModule, MatIconModule, MatListModule, MatSortModule, MatTableModule } from '@angular/material';
import { NavMenuComponent } from './nav-menu.component';
import {FlexLayoutModule} from '@angular/flex-layout';
import {RefillService} from './refill.service';
import {MatCheckboxModule} from '@angular/material/checkbox';
import {MatPaginatorModule} from '@angular/material/paginator';
@NgModule({
declarations: [
AppComponent,
NavMenuComponent
],
imports: [
BrowserModule.withServerTransition({ appId: 'ng-cli-universal' }),
HttpClientModule,
MatCheckboxModule,
MatProgressBarModule,
MatSnackBarModule,
BrowserAnimationsModule,
MatCardModule,
FormsModule,
FlexLayoutModule,
HttpModule,
MatSortModule,
MatPaginatorModule,
MatProgressSpinnerModule,
MatToolbarModule,
MatFormFieldModule,
MatSelectModule,
MatButtonModule,
MatSidenavModule,
MatIconModule,
MatListModule,
LayoutModule,
MatSortModule,
MatInputModule,
MatTableModule,
RouterModule.forRoot([
{ path: '', redirectTo: '/activerefills', pathMatch: 'full' },
{ path: 'activerefills', component:NavMenuComponent},
])
],
providers: [RefillService],
bootstrap: [AppComponent]
})
export class AppModule { }
index.html
<!doctype html>
<html lang="en">
<link href="https://fonts.googleapis.com/icon?family=Material+Icons" rel="stylesheet">
<head>
<meta charset="utf-8">
<title>PharmacyRefills</title>
<base href="">
<meta name="viewport" content="width=device-width, initial-scale=1">
<link rel="icon" type="image/x-icon" href="favicon.ico">
</head>
<body>
<app-root>Loading...</app-root>
</body>
</html>
Может быть, вы, ребята, можете увидеть то, чего я не вижу. Спасибо!