Base solution for your next web application

Activities of "riaan"

Hi,

I don't get any build errors but I do get the red squiggly lines when viewing the abp.d.ts file.

[attachment=0:3mmh5obq]abp.d.ts.png[/attachment:3mmh5obq]

I have updated to TypeScript (2.1.4) for Visual Studio 2015 [https://www.microsoft.com/en-us/download/details.aspx?id=48593], but still the red lines appear.

Any ideas on how to get rid of them, or should I just ignore them in my solution?

Hi,

Using ASP.NET Zero Core

I discovered during a merge that one of our developers used the incorrect naming convention for our table names on one of the entities.

[Table("PbFoodNotes")]
    public class FoodNote : FullAuditedEntity

should read

[Table("PpFoodNotes")]
    public class FoodNote : FullAuditedEntity

The migration files have already been created.

What would be the best way to change the table name to the correct naming convention with the least impact.

Kind Regards,

Riaan

Hi,

How do I make sure that my filter [https://aspnetzero.com/Documents/Developing-Step-By-Step-Core#filtering-people]) is also case-insensitive (StringComparison.CurrentCultureIgnoreCase)?

Kind regards,

Riaan

Hi,

Thanks. Since there is no production DB yet, the easiest way was to follow your suggestion to rename the tablename in code, and drop the local DBs and run the migrator again.

Worked like a charm. :)

Hi,

I see that we need to look at making use of the I​Equality​Comparer<​T> Interface because of this being a ASPNETCOREZERO project and Contains() is not part of ASPNET CORE.

I will investigate the use of IEqualityComparere<T> for string case insensitive compares a bit later, but found the following solution (although not as elegant) to be working in the meantime for case-insensitive filtering:

var foodNotes = _foodNoteRepository
                .GetAll()
                .WhereIf(
                    !input.Filter.IsNullOrEmpty(),
                    p => p.Title.ToLower().Contains(input.Filter.ToLower()) ||
                         p.Detail.ToLower().Contains(input.Filter.ToLower()))
                .OrderBy(p => p.Title)
                .ThenBy(p => p.CreationTime)
                .ToList();

Hi,

I've tried to publish my ASPNETZERO-core application to my hosting provider with their provided settings file using VS2017. After the publishing of the website show success, when I try to access the site, I get the following error:

An error occurred while starting the application.

.NET Core X64 v4.1.1.0 | Microsoft.AspNetCore.Hosting version 1.1.2 | Microsoft Windows 6.3.9600

The hosting company provided me with an extract of an error file:

Application startup exception: System.ArgumentException: Keyword not supported: '"data source'.
   at System.Data.Common.DbConnectionOptions.ParseInternal(Dictionary`2 parsetable, String connectionString, Boolean buildChain, Dictionary`2 synonyms)
   at System.Data.Common.DbConnectionOptions..ctor(String connectionString, Dictionary`2 synonyms)
   at System.Data.SqlClient.SqlConnectionString..ctor(String connectionString)
   at System.Data.SqlClient.SqlConnectionFactory.CreateConnectionOptions(String connectionString, DbConnectionOptions previous)
   at System.Data.ProviderBase.DbConnectionFactory.GetConnectionPoolGroup(DbConnectionPoolKey key, DbConnectionPoolGroupOptions poolOptions, DbConnectionOptions& userConnectionOptions)
   at System.Data.SqlClient.SqlConnection.ConnectionString_Set(DbConnectionPoolKey key)
   at System.Data.SqlClient.SqlConnection.set_ConnectionString(String value)
   at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerConnection.CreateDbConnection()
   at Microsoft.EntityFrameworkCore.Internal.LazyRef`1.get_Value()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.Open()
   at Microsoft.EntityFrameworkCore.Storage.RelationalConnection.BeginTransaction(IsolationLevel isolationLevel)
   at Microsoft.EntityFrameworkCore.Storage.Internal.SqlServerExecutionStrategy.Execute[TState,TResult](Func`WebDep2 operation, Func`2 verifySucceeded, TState state)
   at Abp.EntityFrameworkCore.Uow.DbContextEfCoreTransactionStrategy.CreateDbContext[TDbContext](String connectionString, IDbContextResolver dbContextResolver)
   at Abp.EntityFrameworkCore.Uow.EfCoreUnitOfWork.GetOrCreateDbContext[TDbContext](Nullable`1 multiTenancySide)
   at MyApp.Migrations.Seed.SeedHelper.WithDbContext[TDbContext](IIocResolver iocResolver, Action`1 contextAction) in C:\Users\User\Source\Repos\MyApp\src\MyApp.EntityFrameworkCore\Migrations\Seed\SeedHelper.cs:line 40
   at System.Collections.Generic.List`1.ForEach(Action`1 action)
   at Abp.AbpBootstrapper.Initialize()
   at Abp.AspNetCore.AbpApplicationBuilderExtensions.UseAbp(IApplicationBuilder app)
   at MyApp.MyApp.Web.Startup.Startup.Configure(IApplicationBuilder app, IHostingEnvironment env, ILoggerFactory loggerFactory) in C:\Users\User\Source\Repos\MyApp\src\MyApp.Web.Mvc\Startup\Startup.cs:line 94
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at Microsoft.AspNetCore.Hosting.ConventionBasedStartup.Configure(IApplicationBuilder app)
   at Microsoft.AspNetCore.Hosting.Internal.WebHost.BuildApplication()
Hosting environment: Production
Content root path: h:\root\home\benborries-001\www\ppdev
Now listening on: http://localhost:10111
Application started. Press Ctrl+C to shut down.

I checked the appsettings.json file for the connection string and it appears to be in order:

{
  "ConnectionStrings": {
    "Default": "Server=HOSTINGPROVIDER.SQL;Database=HOSTING_DB;User Id=MY_HOSTING_USER;Password=THE_PASSWORD;"
  },
  "Abp": {
    "RedisCache": {
      "ConnectionString": "localhost",
      "DatabaseId": -1
    }
  },
  "App": {
    "WebSiteRootAddress": "http://{TENANCY_NAME}.dev.mydomain.xyz/"
  },
  "Authentication": {
    "Facebook": {
      "IsEnabled": "false",
      "AppId": "",
      "AppSecret": ""
    },
    "Google": {
      "IsEnabled": "false",
      "ClientId": "",
      "ClientSecret": ""
    },
    "Twitter": {
      "IsEnabled": "false",
      "ConsumerKey": "",
      "ConsumerSecret": ""
    },
    "Microsoft": {
      "IsEnabled": "false",
      "ConsumerKey": "",
      "ConsumerSecret": ""
    },
    "JwtBearer": {
      "IsEnabled": "true",
      "SecurityKey": "REMOVED",
      "Issuer": "REMOVED",
      "Audience": "REMOVED"
    },
    "OpenId": {
      "IsEnabled": "false",
      "Authority": "",
      "ClientId": "",
      "ClientSecret": ""
    }
  },
  "Recaptcha": {
    "SiteKey": "REMOVED",
    "SecretKey": "REMOVED"
  }
}

When I developed locally I used the MigratorApp to initialiase and seed the database, but on the hosting provider this appear not be be possible.

Any ideas to what the cause might be why I'm getting this?

I tried to run the app without and DB inistialiesd locally, but EFCore does not create the local DB for me. (The hosted DB, without the required tables, is already created by the hosting company)

Any assistance would be greatly appreciated.

Thx,

Riaan

<cite>ismcagdas: </cite> Hi,

Your first problem is related to connection string as you know. Before fixing that, you need to create your db using migrations.

We only have migrator tool for that but I couldn't understand why you couldn't use it. If you have access to SQL DB from your computer, you can run migrator on your PC.

Hi,

Thanks. I managed to get this working. The issue was that the DB tables was not created after the deploy as you suggested.

What I did was to change the MigratorTool's datasource to the website's DB (hosted) and run the migrator, which created the tables for me and resolved our issue.

Thanks.

Hi,

(Article [https://aspnetzero.com/Documents/Development-Guide-Core#authentication]) refers)

On a fast connection (PC) I'm able to get a token back when making a call to "https://mysite.xyz/api/TokenAuth/Authenticate" as per the above article.

On a slow connection (high latency) the response I get back is "Internal Server Error".

The slow connection is either when making the dynamic WebAPI call from our app running on a mobile phone or a shaped internet connection.

How/where can I increase the timeout in my ASPNETZERO app in order to allow for slow request/response?

Thanks,

Riaan

Hi ismcagdas,

I checked the logs and found the following during the api/TokenAuth/Authenticate process.

INFO  2017-05-26 13:35:36,584 [37   ] soft.AspNetCore.Hosting.Internal.WebHost - Request starting HTTP/1.1 POST http://app.my.url/api/TokenAuth/Authenticate application/json 68
DEBUG 2017-05-26 13:35:36,600 [37   ] NetCore.StaticFiles.StaticFileMiddleware - POST requests are not supported
DEBUG 2017-05-26 13:35:36,600 [37   ] osoft.AspNetCore.Routing.Tree.TreeRouter - Request successfully matched the route with name '(null)' and template 'api/TokenAuth/Authenticate'.
DEBUG 2017-05-26 13:35:36,600 [37   ] ore.Mvc.Internal.ControllerActionInvoker - Executing action Company.MyApp.Web.Controllers.TokenAuthController.Authenticate (MyCompany.MyApp.Web.Core)
INFO  2017-05-26 13:35:36,600 [37   ] idateAntiforgeryTokenAuthorizationFilter - Antiforgery token validation failed. The required antiforgery header value "X-XSRF-TOKEN" is not present.
Microsoft.AspNetCore.Antiforgery.AntiforgeryValidationException: The required antiforgery header value "X-XSRF-TOKEN" is not present.
   at Microsoft.AspNetCore.Antiforgery.Internal.DefaultAntiforgery.<ValidateRequestAsync>d__9.MoveNext()
--- End of stack trace from previous location where exception was thrown ---
   at System.Runtime.ExceptionServices.ExceptionDispatchInfo.Throw()
   at System.Runtime.CompilerServices.TaskAwaiter.HandleNonSuccessAndDebuggerNotification(Task task)
   at Microsoft.AspNetCore.Mvc.ViewFeatures.Internal.ValidateAntiforgeryTokenAuthorizationFilter.<OnAuthorizationAsync>d__3.MoveNext()
INFO  2017-05-26 13:35:36,600 [37   ] ore.Mvc.Internal.ControllerActionInvoker - Authorization failed for the request at filter 'Abp.AspNetCore.Mvc.Antiforgery.AbpAutoValidateAntiforgeryTokenAuthorizationFilter'.
INFO  2017-05-26 13:35:36,600 [37   ] icrosoft.AspNetCore.Mvc.StatusCodeResult - Executing HttpStatusCodeResult, setting HTTP status code 400

Note that I do have the HTTPS rewrite rule for the .netcore app in the web.config on in order to redirect all calls made to the website and dynamic wbapi endpoints to HTTPS instead of http. Would this have an effect?

The web.config as follow:

<?xml version="1.0" encoding="utf-8"?>
<configuration>
  <system.webServer>
    <handlers>
      <add name="aspNetCore" path="*" verb="*" modules="AspNetCoreModule" resourceType="Unspecified" />
    </handlers>
    <aspNetCore processPath="dotnet" arguments=".\MyCompany.MyApp.Web.Mvc.dll" stdoutLogEnabled="false" stdoutLogFile=".\logs\stdout" forwardWindowsAuthToken="false" />
	<rewrite>
		<rules>
			<rule name="HTTP to HTTPS redirect" stopProcessing="true">
				<match url="(.*)" />
					<conditions>
						<add input="{HTTPS}" pattern="off" ignoreCase="true" />
					</conditions>
				<action type="Redirect" redirectType="Found" url="https://{HTTP_HOST}/{R:1}" />
	        </rule>
        </rules>
    </rewrite>
  </system.webServer>
</configuration>

and the appsettings.json as follow:

{
  "ConnectionStrings": {
    "Default": "sqlconnectionstring"
  },
  "App": {
    "WebSiteRootAddress": "http://app.my.url"
  },
  "Authentication": {
    "JwtBearer": {
      "IsEnabled": "true",
      "SecurityKey": "MyApp_8DEB2BA534E24D56",
      "Issuer": "MyApp",
      "Audience": "MyApp"
    },
  }
}

Thanks,

Riaan

Hi.

Thanks. It appears the http rewrite rule in the web.config caused the issue.

Any best practice aspnetzero recommendation for implementing https only on an aspnetzero site? Apart from setting the site directory in the appsettings.json file to force https only, for mvc as well as static files?

Thx

Showing 1 to 10 of 24 entries